2014-03-19 42 views
0
public static double[] ParseDoubleArray(MWArray array) 
{ 
    var vector2d = (array as MWNumericArray).ToArray() as double[,]; 
    var vector1d = new double[vector2d.Length]; 
    System.Buffer.BlockCopy(vector2d, 0, vector1d, 0, vector2d.Length * sizeof(double)); 
    return vector1d; 
} 

这是我获得double[]MWArray 但是我为什么做这个功能:MWarray转换双重[]以USHORT []

prepImage.RawData = Array.ConvertAll(prepRawData, Convert.ToUInt16); 

我有时会得到一个例外,因为MATLAB是返回双打太大转换。

有没有人遇到过这个问题?我可以裁剪数字,但还有其他解决方案吗?

+0

预计双打太大?也许这是你的Matlab代码中返回意外值的问题? – Vache

+0

@Vache我从Array.ConvertAll()函数得到一个异常为什么它不能处理双打你知道吗? – Gilad

回答

1

UInt16,正如其名称所暗示的,保存无符号的16位整数(值从0到65535)。另一方面,double结构的范围从-1.79769313486232e308到1.79769313486232e308。

这里的问题是你的Matlab代码返回一个负值或大于65535的正值。Matlab还将NaN分配给任何未初始化的值,这对UInt16也是无效的。

要解决您的问题,请确保您的Matlab代码实际上只返回0到65535范围内的值,或者将C#端的数据结构更改为UInt16以外的其他值。