.NET 与 MATLAB 之间的数据转换规则
注意
下表列出的转换规则适用于列出的本机类型的标量、向量、矩阵和多维数组。
托管 .NET 类型到 MATLAB 数组
下表列出了将本机 .NET 类型转换为 MATLAB® 数组时使用的数据转换规则。
转换规则:托管类型到 MATLAB 数组
| 本机 .NET 类型 | MATLAB 数组 | 注释 |
|---|---|---|
|
| - |
|
| 仅当 |
|
| |
|
| |
|
| |
|
| |
|
| 无 |
|
| 无 |
MATLAB 数组到托管 .NET 类型
下表列出了将 MATLAB 数组转换为本机 .NET 类型时使用的数据转换规则。
转换规则:MATLAB 数组到托管类型
MATLAB 类型 | .NET 类型(原始) | .NET 类型(类) | 注释 |
|---|---|---|---|
| N/A |
| Cell 和 struct 数组没有对应的 .NET 类型。 |
| N/A |
| |
|
|
| |
|
|
| 默认为双精度类型。 |
|
|
| |
|
|
| 不支持转换为等效的无符号类型 |
|
|
| 不支持转换为等效的无符号类型 |
|
|
| 不支持转换为等效的无符号类型 |
|
|
| 无 |
|
|
| 无 |
函数句柄 | 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 类型 |
|---|---|
| numeric |
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 标量 .NET 结构体 | 由 .NET 结构的 |
.NET 结构体 [ N ] | MATLAB 结构 |
.NET 结构体 [ | MATLAB 结构体 [ |
native.MWStructArray | struct |
native.MWCellArray | cell |
Hashtable | struct |
| struct |
ArrayList | cell |
| 默认应用程序域中的任何其他 .NET 类型 | .NET 对象 |
| 非默认应用程序域中的任何其他可序列化的 .NET 类型 | .NET 对象 |
转换规则:MATLAB 数值类型到 .NET 类型
| 要将以下 MATLAB 类型转换为: | 以下类型: | 遵循以下规则: |
|---|---|---|
numeric | 标量 | 在 MATLAB 中类型必须是标量。例如,MATLAB 中的 1 X 1 |
| 向量 | 在 MATLAB 中,该类型必须是向量。例如,MATLAB 中的 1 X | |
维数组 | 用户指定的 |
提示
转换 MATLABnumeric 数组时,允许进行扩展转换。例如,int 可以转换为 double。指定的类型必须是相等或者更宽的数值类型。收缩转换会引发 ArgumentException。
小心
.NET 类型不如 MATLAB 类型灵活。在将数据集成到应用程序之前,请务必小心并使用 .NET 输出进行适当的测试。
转换规则:MATLAB Char 数组转换为 .NET 类型
| 要将以下 MATLAB 类型转换为: | 以下类型: | 遵循以下规则: |
|---|---|---|
char | Char | char 必须是标量。 |
Char 数组 |
| |
String | MATLAB | |
String 数组 |
|
转换规则:MATLAB 逻辑数组到 .NET 类型
| 要将以下 MATLAB 类型转换为: | 以下类型: | 遵循以下规则: |
|---|---|---|
logical | Boolean | logical 必须是标量。 |
Boolean[] | MATLAB | |
Boolean 数组 |
|
转换规则:元胞数组至 .NET 类型
| 要将以下 MATLAB 类型转换为: | 以下类型: | 遵循以下规则: |
|---|---|---|
cell | System.Array |
|
ArrayList | MATLABcell 数组必须是向量。 |
小心
如果 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 | 标量 |
转换规则: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:
int8uint16uint32uint64
但是,可以将这些类型作为参量传递给 MATLAB Compiler SDK 组件。