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

时间:2017-09-12 16:54:48

标签: c#

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

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

byte[] bytedata = doublearray.Select(X => Convert.ToByte(X)).ToArray();

但我发现这种方法很慢,并且耗尽了我所有的处理器时间。

是否有人建议以最快的方式从double数组中提取数据并将其传递给字节数组?

[编辑]这是我正在寻找的表演,而不仅仅是转换。我还需要废弃多余的空字节,所以:

static byte[] GetBytes(double[] values) { return values.SelectMany(value => BitConverter.GetBytes(value)).ToArray(); }

不起作用

1 个答案:

答案 0 :(得分:1)

除了显然用任何输出为你工作替代MessageBox之外,没有什么可说的。在我的系统上,在发布和调试中,循环解决方案快了大约10倍。编辑:请注意,此代码可能不安全。如果您对源数据有任何疑问,可以随时loopData[i] = (byte) ((int)doubleData[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());