将双数组转换为字节数组

时间:2011-08-05 07:32:12

标签: c# c#-3.0

如何将double[]数组转换为byte[]数组,反之亦然?

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(sizeof(double));
        Console.WriteLine(double.MaxValue);

        double[] array = new double[] { 10.0, 20.0, 30.0, 40.0 };
        byte[] convertedarray = ?

        Console.Read();
    }
}

7 个答案:

答案 0 :(得分:18)

假设你希望一个接一个地放置在相应字节数组中的双精度数,LINQ可以简单地解决这个问题:

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

或者,您可以使用Buffer.BlockCopy()

static byte[] GetBytesAlt(double[] values)
{
    var result = new byte[values.Length * sizeof(double)];
    Buffer.BlockCopy(values, 0, result, 0, result.Length);
    return result;
}

转换回来:

static double[] GetDoubles(byte[] bytes)
{
    return Enumerable.Range(0, bytes.Length / sizeof(double))
        .Select(offset => BitConverter.ToDouble(bytes, offset * sizeof(double)))
        .ToArray();
}

static double[] GetDoublesAlt(byte[] bytes)
{
    var result = new double[bytes.Length / sizeof(double)];
    Buffer.BlockCopy(bytes, 0, result, 0, bytes.Length);
    return result;
}

答案 1 :(得分:6)

您可以使用SelectToArray方法将一个数组转换为另一个数组:

oneArray = anotherArray.Select(n => {
  // the conversion of one item from one type to another goes here
}).ToArray();

要从double转换为byte:

byteArray = doubleArray.Select(n => {
  return Convert.ToByte(n);
}).ToArray();

要从字节转换为双倍,只需更改转换部分:

doubleArray = byteArray.Select(n => {
  return Convert.ToDouble(n);
}).ToArray();

如果要将每个double转换为多字节表示,可以使用SelectMany方法和BitConverter类。由于每个double都会产生一个字节数组,SelectMany方法会将它们展平为一个结果。

byteArray = doubleArray.SelectMany(n => {
  return BitConverter.GetBytes(n);
}).ToArray();

要转换回双精度数,您需要一次循环八个字节:

doubleArray = Enumerable.Range(0, byteArray.Length / 8).Select(i => {
  return BitConverter.ToDouble(byteArray, i * 8);
}).ToArray();

答案 2 :(得分:2)

使用Bitconverter类。

答案 3 :(得分:2)

double[] array = new double[] { 10.0, 20.0, 30.0, 40.0 };
byte[] convertedarray = array.Select(x => Convert.ToByte(x)).ToArray();

答案 4 :(得分:0)

我认为你可以使用这样的东西:

byte[] byteArray = new byteArray[...];  
...
byteArray.SetValue(Convert.ToByte(d), index);

答案 5 :(得分:0)

您应该使用Buffer.BlockCopy方法。

查看页面示例,您将清楚地了解。

doubleArray = byteArray.Select(n => {return Convert.ToDouble(n);}).ToArray();

答案 6 :(得分:-1)

var byteArray = (from d in doubleArray
                 select (byte)d)
                .ToArray();

var doubleArray = (from b in byteArray
                   select (double)b)
                  .ToArray();

干杯。