将双精度数组转换为字节数组
本文关键字:数组 字节 字节数 转换 双精度 | 更新日期: 2023-09-27 18:04:47
如何将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();
}
}
假设您希望将双精度对象一个接一个地放在相应的字节数组中,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;
}
您可以使用Select
和ToArray
方法将一个数组转换为另一个数组:
oneArray = anotherArray.Select(n => {
// the conversion of one item from one type to another goes here
}).ToArray();
将双精度浮点数转换为字节:
byteArray = doubleArray.Select(n => {
return Convert.ToByte(n);
}).ToArray();
要从字节转换为双精度,只需更改转换部分:
doubleArray = byteArray.Select(n => {
return Convert.ToDouble(n);
}).ToArray();
如果您想将每个双精度转换为多字节表示,您可以使用SelectMany
方法和BitConverter
类。由于每个double将产生一个字节数组,因此SelectMany
方法将它们平放为单个结果。
byteArray = doubleArray.SelectMany(n => {
return BitConverter.GetBytes(n);
}).ToArray();
要转换回双精度类型,需要一次循环8个字节:
doubleArray = Enumerable.Range(0, byteArray.Length / 8).Select(i => {
return BitConverter.ToDouble(byteArray, i * 8);
}).ToArray();
使用Bitconverter类
double[] array = new double[] { 10.0, 20.0, 30.0, 40.0 };
byte[] convertedarray = array.Select(x => Convert.ToByte(x)).ToArray();
您应该使用Buffer.BlockCopy
方法。
看这页的例子,你就会明白了。
doubleArray = byteArray.Select(n => {return Convert.ToDouble(n);}).ToArray();
我觉得你可以这样写:
byte[] byteArray = new byteArray[...];
...
byteArray.SetValue(Convert.ToByte(d), index);
var byteArray = (from d in doubleArray
select (byte)d)
.ToArray();
var doubleArray = (from b in byteArray
select (double)b)
.ToArray();
欢呼。