主要内容

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

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

R2026b

注意

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

托管 .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<K,V >其中 K = 字符串,V = 标量或 [Numeric,boolean,Char,String]数组

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

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

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

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

向量

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

N 维数组

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

提示

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

小心

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

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

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

N 维 Char 类型必须与 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 数组转换为 N 维 System.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 的高维数组以类似的方式进行转换。

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

不支持的 MATLAB 数组类型

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

  • int8

  • uint16

  • uint32

  • uint64

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