MWarray将double[]转换为ushort[]

本文关键字:ushort 转换 MWarray double | 更新日期: 2023-09-27 17:50:53

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;
}

这是我从MWArray得到double[]的函数然而,我为什么这样做:

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

我有时会得到一个异常,因为matlab返回的双精度值太大,无法转换。

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

MWarray将double[]转换为ushort[]

UInt16,顾名思义,保存无符号16位整数(取值从0到65535)。另一方面,double结构范围为-1.79769313486232e308 ~ 1.79769313486232e308。

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

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