如何在c#中将double值转换为两个字节数组

时间:2016-02-08 07:41:24

标签: c#

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

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

3 个答案:

答案 0 :(得分:1)

double是64位值,恰好是8个字节。对此无能为力。

答案 1 :(得分:1)

double的长度为8个字节,因此,除非您想要8个特定的子阵列,否则您将获得(您可能不会)那么这是错误的做法。

您可以将变量转换为单精度float。那当然会失去一些精确度,但你会得到4个字节而不是8个字节。

如果这仍然是不可接受的,那么你需要实现一个half-precision float的实现,遗憾的是它并不是开箱即用的。

我在这里找到了一个实现: http://sourceforge.net/p/csharp-half/code/HEAD/tree/System.Half

你可以像这样使用它:

var half = (Half)yourDouble;
var bytes = Half.GetBytes(half); // 2 bytes

答案 2 :(得分:1)

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;