如何在 c# 中将双精度值转换为双字节数组

本文关键字:转换 字节 数组 字节数 双精度 | 更新日期: 2023-09-27 18:33:34

我正在开发一个Windows窗体应用程序。我有一个双精度值 1.5.我需要将该值转换为双字节数组。但是当我使用 BitConverter.GetBytes 进行转换时,会获得 8 字节的数据。请参考下面的代码。

double d = 1.5;
 byte[] array = BitConverter.GetBytes(d);

如何在 c# 中将双精度值转换为双字节数组

Double8 字节的值,所以如果你有一个任意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