MWarray将double []转换为ushort []

时间:2014-03-19 13:21:24

标签: c# matlab

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的功能 但是为什么我这样做:

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

我有时会得到一个例外,因为matlab返回的双精度太大而无法进行转换。

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

1 个答案:

答案 0 :(得分:1)

顾名思义,

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

这里的问题是您的Matlab代码返回负值或大于65535的正值.Matlab还会将NaN分配给任何未初始化的值,该值对UInt16也无效。< / p>

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