如何在 c# 中将双精度值转换为双字节数组
本文关键字:转换 字节 数组 字节数 双精度 | 更新日期: 2023-09-27 18:33:34
我正在开发一个Windows窗体应用程序。我有一个双精度值 1.5.我需要将该值转换为双字节数组。但是当我使用 BitConverter.GetBytes 进行转换时,会获得 8 字节的数据。请参考下面的代码。
double d = 1.5;
byte[] array = BitConverter.GetBytes(d);
Double
是 8 字节的值,所以如果你有一个任意的double
你就没有希望了;但是,如果你有一些限制,例如,该值在 [0..100]
范围内,并且在小数点后最多有 2
位数字,你可以对其进行编码:
// presuming source in [0..100] with at most 2 digit after decimal point
double source = 1.5;
// short is 2 byte value
short encoded = (short) (source * 100 + 0.5);
byte[] array = BitConvertor.GetBytes(encoded);
// decode back to double
double decoded = encoded / 100.0;
双精度是一个 64 位的值,恰好是 8 个字节。对此无能为力。
> double
的长度为 8 个字节,所以除非你想要从你得到的 8 个子数组中选择一个特定的子数组(你可能不需要),那么这是错误的方法。
您可以将变量转换为单精度float
。这当然会失去一些精度,但你会得到 4 个字节而不是 8 个字节。
如果这仍然不可接受,则需要实现半精度浮点数,遗憾的是,.NET 并不是
现成的。我在这里找到了一个实现:http://sourceforge.net/p/csharp-half/code/HEAD/tree/System.Half
你可以像这样使用它:
var half = (Half)yourDouble;
var bytes = Half.GetBytes(half); // 2 bytes