我正在开发一个Windows窗体应用程序。我有一个double值1.5。我需要转换成一个两字节数组的值。但是当我使用BitConverter.GetBytes进行转换时,获得8个字节的数据。请参考下面的代码。
double d = 1.5;
byte[] array = BitConverter.GetBytes(d);
答案 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;