C# matlab混合编程之类型转换

        在混合编程过程中有两个类型,MWArray和MWNumericArray,其中MWArray属于matlab的数据类型,MWNumericArray属于Matlab和C#的中间类型。两者均可作为DLL文件的输入、输出,我们可将数值直接赋予这两种变量,也可以通过强制类型转换将C#类型的变量转为MWNumericArray类型,但不能转为MWArray类型。

        C#向matlab类型转换:

(1)直接赋值给MWArray和MWNumericArray类型变量

(2)强制类型转换(MWNumericArray(需要转的变量名称))

(3)字符串类型的C#变量可直接作为dll文件的输入输出

       MATLAB向C#类型转换:

MWArray类型属于matlab中的数据类型,MWNumericArray类型是matlab和C#的中间类型,所以MWNumericArray类型向C#类型转换需要调用一系列函数,如byteToScalarByte(),ToScalarDouble()等。如果要是MWArray类型,则需先转为MWNumericArray类型,再转为C#类型。

        若matlab类型的变量为一个数组,我们需要将其转为C#类型可通过以下两种方式

public Array ToArray(MWArrayComponent component);(用于多维数组)

  eg:

double[,] temp=new double[1,3];

temp = (double[,])((MWNumericArray)mwArgout[1]).ToArray(MWArrayComponent.Real);//mwArgout[1]为MWArray类型变量,Real参数代表的是取数据的实数部分

 

public Array ToVector(MWArrayComponent component);(用于一维数组)

 

eg:

double[] temp=new double[];

temp = (double[])((MWNumericArray)mwArgout[1]).ToVector(MWArrayComponent.Real);//mwArgout[1]为MWArray类型变量,

 

前边说过MW******Array是C#和matlab的中间类型,MWArray是MATLAB类型。为顺利完成matlab到C#的类型转换,需要弄清楚matlab传回的是什么类型(struct?cell?char?抑或是numeric?),然后将MWArray转为对应的MW******Array类型

C# matlab混合编程之类型转换_第1张图片

MWNumericArray中的数据可以转化为Byte、double、float、integer、long和short类型,一般常用的就是int和double两种。


            将C#类型转为MWNumericArray类型或者MWArray类型,两种类型均可作为DLL文件的输入,也可以写成下方形式
           
            
            对于DLL文件的输出datanew_matlab,其类型必须为MWArray,MWNumericArray类型是不可以的
            
            首先进行强制类型转换(MWNumericArray),将结果变为中间类型,由于是一维数组,且是实数,所以
             使用ToVector(MWArrayComponent.Real),最后在进行强制类型转化(double[]),转成我们需要的C#类型

https://www.jianshu.com/p/3f37f91a1d83

https://www.cnblogs.com/noah0532/p/9901474.html

你可能感兴趣的:(C# matlab混合编程之类型转换)