数据转换

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变量。