主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

.NET 与 MATLAB 之间的数据转换规则

注意

下表列出的转换规则适用于列出的本机类型的标量、向量、矩阵和多维数组。

托管 .NET 类型到 MATLAB 数组

下表列出了将本机 .NET 类型转换为 MATLAB® 数组时使用的数据转换规则。

转换规则:托管类型到 MATLAB 数组

本机 .NET 类型MATLAB 数组注释

System.Double

double

-

System.Single

single

仅当 makeDouble 构造函数参量设置为 false 时可用。默认值为 true,创建 MATLABdouble 类型。

System.Int64

int64

System.Int32

int32

System.Int16

int16

System.Byte

int8

System.String

char

System.Boolean

logical

MATLAB 数组到托管 .NET 类型

下表列出了将 MATLAB 数组转换为本机 .NET 类型时使用的数据转换规则。

转换规则:MATLAB 数组到托管类型

MATLAB 类型

.NET 类型(原始)

.NET 类型(类)

注释

cell

N/A

MWCellArray

Cell 和 struct 数组没有对应的 .NET 类型。

structure

N/A

MWStructArray

char

System.String

MWCharArray

double

System.Double

MWNumericArray

默认为双精度类型。

single

System.Single

MWNumericArray

uint64

System.Int64

MWNumericArray

不支持转换为等效的无符号类型

uint32

System.Int32

MWNumericArray

不支持转换为等效的无符号类型

uint16

System.Int16

MWNumericArray

不支持转换为等效的无符号类型

uint8

System.Byte

MWNumericArray

logical

System.Boolean

MWLogicalArray

函数句柄

N/A

N/A

对象

N/A

N/A

.NET 类型到 MATLAB 类型

为了创建描述 MATLAB Compiler SDK™ 生成的组件的类型安全 API 的 .NET 接口,您必须决定用于输入和输出参数的 .NET 类型。

选择输入类型时,请考虑 .NET 输入如何变成 MATLAB 类型。选择输出类型时,请考虑逆转换

下表列出了将 .NET 类型转换为 MATLAB 数组以及将 MATLAB 数组转换为 .NET 类型的数据转换结果和规则。

注意

无效转换导致抛出 ArgumentException

转换结果:.NET 类型到 MATLAB 类型

.NET 类型

转换为 MATLAB 类型

NumericType

  • System.Double

  • System.Single

  • System.Byte

  • System.Int16

  • System.Int32

  • System.Int64

  • System.Int64

numeric

System.Boolean

logical

System.Char

char

System.String

NumericType[N]

NumericType[1,N]

NumericType[Pn,..,P1,M,N]

NumericType[M,N,P1,..,Pn]

System.Boolean[N]

logical [1,N]

System.Boolean[Pn,..,P1,M,N]

logical [M,N,P1,..,Pn]

System.Char[N]

char [1,N]

System.Char[Pn,..,P1,M,N]

char [M,N,P1,..,Pn]

System.String[N]

char [N,max_string_length]

System.String[Pn,..,P1,N]

char [N,max_string_length, P1,..,Pn]

标量 .NET 结构体

由 .NET 结构的 public 实例字段构建的 MATLAB 结构

.NET 结构体 [ N ]

MATLAB 结构 [1,N] 其中每个元素均由 .NET 结构的 public 实例字段构造

.NET 结构体 [ M,N ]

MATLAB 结构体 [ M , N ],其中每个元素均由 .NET struct 的 public 实例字段构造

native.MWStructArray struct
native.MWCellArray cell
Hashtable struct

Dictionary<KV >其中 K = 字符串,V = 标量或 [NumericbooleanCharString]数组

struct
ArrayList cell
默认应用程序域中的任何其他 .NET 类型.NET 对象
非默认应用程序域中的任何其他可序列化的 .NET 类型 .NET 对象

转换规则:MATLAB 数值类型到 .NET 类型

要将以下 MATLAB 类型转换为:以下类型:遵循以下规则:
numeric标量

在 MATLAB 中类型必须是标量。例如,MATLAB 中的 1 X 1 int

向量

在 MATLAB 中,该类型必须是向量。例如,MATLAB 中的 1 X NN X 1 int 数组。

N 维数组

用户指定的 N 维数组类型必须与 MATLABnumeric 数组的秩相匹配。

提示

转换 MATLABnumeric 数组时,允许进行扩展转换。例如,int 可以转换为 double。指定的类型必须是相等或者更宽的数值类型。收缩转换会引发 ArgumentException

小心

.NET 类型不如 MATLAB 类型灵活。在将数据集成到应用程序之前,请务必小心并使用 .NET 输出进行适当的测试。

转换规则:MATLAB Char 数组转换为 .NET 类型

要将以下 MATLAB 类型转换为:以下类型:遵循以下规则:
charCharchar 必须是标量。
Char 数组

NChar 类型必须与 MATLAB char 数组的等级匹配。

String

MATLAB char 数组必须为 [1,N]

String 数组

N 维 MATLAB char 数组可以转换为 (N-1)String 类型的数组。

转换规则:MATLAB 逻辑数组到 .NET 类型

要将以下 MATLAB 类型转换为:以下类型:遵循以下规则:
logicalBooleanlogical 必须是标量。
Boolean[]

MATLABlogical 数组必须是 [1,N][N,1]

Boolean 数组

NBoolean 数组必须与 MATLABlogical 数组的等级匹配。

转换规则:元胞数组至 .NET 类型

要将以下 MATLAB 类型转换为:以下类型:遵循以下规则:
cellSystem.Array

N 维 MATLABcell 数组转换为 NSystem.Array 类型的 object 数组。

ArrayListMATLABcell 数组必须是向量。

小心

如果 MATLABcell 数组包含 struct,则它保持不变。所有其他类型都将转换为本机类型。任何嵌套的 cell 数组都将转换为与 System.Array 数组的维度匹配的 cell,如以下代码片段所示:

Let C = {[1,2,3], {[1,2,3]},'Hello world'}
%  be a cell
C 可以转换为 object[1,3],其中 object[1,1] 包含 int[,]object[1,2] 包含 object[1,1] 其第一个元素为 int[,]object[1,3] 包含 char[,]

注意

任何嵌套的元胞数组都将转换为与 System.Array 数组维度匹配的 cell

转换规则:结构体转为 .NET 类型

要将以下 MATLAB 类型转换为:以下类型:遵循以下规则:
struct.NET struct指定的 .NET 结构中的公共字段的名称和数量必须与 MATLAB 结构中的字段的名称和数量匹配。
Hashtable

标量 struct 可以转换为 Hashtable。任何嵌套的 struct 也将转换为 Hashtable。如果嵌套 struct 不是标量,则会抛出 ArgumentException。字典键必须是 String 类型。

转换规则:MATLAB 中的 .NET 对象到 .NET 本机对象

要将以下 MATLAB 类型转换为:以下类型:遵循以下规则:
.NET 对象包含对象的类型或超类型MATLAB 中的 .NET 对象只能转换为类型或超类型。

字符和字符串转换

本机 .NET 字符串转换为 1 × NMATLAB 字符数组,其中 N 等于 .NET 字符串的长度。

.NET 字符串数组 (string[]) 被转换为 M×N 字符数组,其中 M 等于字符串 ([]) 数组中的元素数量,N 等于数组中的最大字符串长度。

String 的高维数组以类似的方式进行转换。

一般来说,NString 数组转换为 N+1 维 MATLAB 字符数组,并使用适当的零填充,其中提供的字符串具有不同的长度。

不支持的 MATLAB 数组类型

MATLAB Compiler SDK 产品不支持返回以下 MATLAB 数组类型,因为它们不符合 CLS:

  • int8

  • uint16

  • uint32

  • uint64

但是,可以将这些类型作为参量传递给 MATLAB Compiler SDK 组件。