数据转换

MATLAB中的数组类型与.NET的数据类型是不一样的,将编译器生成的类库集成到.NET程序中时,需要首先考虑数据类型的转换问题。[大谦MATLAB,dqmatlab点com]

表3-2中列出了.NET类型转换为MATLAB数组的数据转换规则。注意:表3-2中列出的转换规则适用于标量、向量、矩阵和这里列出的本地类型构成的多维数组。

表3-2 本地.NET类型转换为MATLAB数组的转换规则

本地.NET类型 MATLAB数组 解 释
System.Double double
System.Single single 只有在makeDouble构造函数的变量设置为false时才可用。默认时为true,创建一个MATLAB double类型。
System.Int64 int64 只有在makeDouble构造函数的变量设置为false时才可用。默认时为true,创建一个MATLAB double类型。
System.Int32 int32 只有在makeDouble构造函数的变量设置为false时才可用。默认时为true,创建一个MATLAB double类型。
System.Int16 int16 只有在makeDouble构造函数的变量设置为false时才可用。默认时为true,创建一个MATLAB double类型。
System.Byte int8 只有在makeDouble构造函数的变量设置为false时才可用。默认时为true,创建一个MATLAB double类型。
System.String char
System.Boolean logical

表3-3中列出了MATLAB数组类型转换为本地.NET类型的数据转换规则。

表3-3 MATLAB数组转换为本地.NET类型的转换规则

MATLAB类型 .NET类型 .NET类型(类) 解 释
cell N/A MWCellArray 元胞和结构数组没有对应的.NET类型
structure N/A MWStructArray 元胞和结构数组没有对应的.NET类型
char System.String MWCharArray 元胞和结构数组没有对应的.NET类型
double System.Double MWNumericArray 默认时为double类型
single System.Single MWNumericArray 默认时为double类型
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字符数组,其中,N等于.NET字符串的长度。.NET字符串数 本地的.NET字符串转换为的MATLAB字符数组,其中,N等于.NET字符串的长度。.NET字符串数

本地的.NET字符串转换为的MATLAB字符数组,其中,N等于.NET字符串的长度。.NET字符串数组转换为的字符数组,其中,M等于字符串数组中元素的个数,N等于数组中字符串的最大长度。高维字符串数组可作类似的转换。

库编译器提供了几个数据转换类来实现数据转换,包括:

MWArray

MWIndexArray

MWCellArray

MWCharacterArray

MWLogicalArray

MWNumericArray

MWStructArray

其中,MWArray类和MWIndexArray类为抽象类。其它类表示标准的MATLAB数组类型:元胞、字符、逻辑、数值和结构。每个类都提供了构造函数和一系列属性和方法来创建和访问对应的MATLAB数组的状态。

使用MWArray数据转换类,可以在不使用显式数据转换的情况下将大部分本地.NET数据作为参数直接进行传递。对于大部分本地数值和字符串类型,有一个隐式的运算符将本地类型转换为合适的MATLAB数组。

有一些数据类型如结构数组、结构数组和复数值数组等在.NET中没有对应的数据类型,表示这些数据类型,必须创建MWCellArray类,MWStructArray类或MWNumericArray类的实例。

所有从MATLAB函数返回到.NET方法的数据都表示相应的MWArray子类的一个实例。例如,MATLAB元胞数组时作为MWCellArray对象返回的。

在大多数情况下,如果一个本地.NET数组在C#程序中用作输入参数,库编译器会在将它传递给类的方法之前将它转换为合适的MWArray类的实例。库编译器可以将大部分CLS封装的字符串、数值类型或这些类型的多维数组转化为合适的MWArray类型。

例如,下面的.NET语句:

Result=theFourier.plotfft(3, data, interval);

其中,第3个变量interval的.NET本地类型是System.Double。库编译器会将该变量转

其中,第3个变量interval的.NET本地类型是System.Double。库编译器会将该变量转换为MATLAB的 double MWNumericArray类型(这是一个包含MATLAB double型数组的打包器类)。

返回的数据不会自动转换为本地数组。如果需要对应的本地数组类型,调用ToArray方法,它将MATLAB数组转换为除元胞数组和结构数组外的合适的本地数据类型。

下面是一个演示如何将double值转换为 MWNumericArray类型的代码片段:

MWNumericArray arraySize=5.0;

magicSquare=magic.MakeSqr(arraySize);

double型值转换并赋给变量arraySize以后,以后不再需要转换就可以在MATLAB方法中使用arraySize变量。