Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何快速将double[]转换为byte[]_C# - Fatal编程技术网

C# 如何快速将double[]转换为byte[]

C# 如何快速将double[]转换为byte[],c#,C#,我有一个非常大的双精度数组,其中包含图像数据,所有值都在0到255之间 为了使用BitmapSource.Create,我需要一个字节数组。因此,我使用以下方法转换所有数据: byte[]bytedata=doublearray.SelectX=>Convert.ToByteX.ToArray 但是我发现这种方法非常慢,而且它占用了我所有的处理器时间 有没有人推荐从双数组中提取数据并将其传递到字节数组的最快方法 [编辑]这是我想要的性能,而不仅仅是转换过程中的性能。我还需要废弃多余的空字节,因此

我有一个非常大的双精度数组,其中包含图像数据,所有值都在0到255之间

为了使用BitmapSource.Create,我需要一个字节数组。因此,我使用以下方法转换所有数据:

byte[]bytedata=doublearray.SelectX=>Convert.ToByteX.ToArray

但是我发现这种方法非常慢,而且它占用了我所有的处理器时间

有没有人推荐从双数组中提取数据并将其传递到字节数组的最快方法

[编辑]这是我想要的性能,而不仅仅是转换过程中的性能。我还需要废弃多余的空字节,因此:

静态字节[]GetBytesdouble[]值 { 返回值。SelectManyvalue=>BitConverter.GetBytesvalue.ToArray; }


不起作用

除了用任何适合您的输出替换MessageBox之外,关于这一点没有什么可说的。在我的系统上,在发行版和调试中,循环解决方案的速度大约快了10倍。编辑:请注意,此代码当然可能不安全。您始终可以执行loopData[i]=字节intdoubleData[i]&0xFF;如果对您的源数据有任何疑问

    using System.Diagnostics;
    double[] doubleData = new double[500000];
    byte[] loopData;
    byte[] convertData;
    //linq approach
    Stopwatch sw = Stopwatch.StartNew();
    convertData = doubleData.Select(o => Convert.ToByte(o)).ToArray();
    MessageBox.Show(sw.ElapsedMilliseconds.ToString());

    //loop approach
    sw = Stopwatch.StartNew();
    loopData = new byte[doubleData.Length];
    for (int i = 0; i<doubleData.Length; ++i)
    {
        loopData[i] = (byte)(doubleData[i]);
    }
    MessageBox.Show(sw.ElapsedMilliseconds.ToString());

一个for循环和一个显式强制转换可能?为什么这是在一个双倍数组中?array.ConvertAll会更快。@SamIam-有很多摄像机出于任何原因转储这样的数据。可能以这种方式存储在内部,以便相机固件可以在其上运行变换和其他矩阵数学..可能重复