3

请检查此代码

float f = BitConverter.ToSingle(new byte[] { 0xBF, 0x04, 0x8E, 0xFF }, 0);
byte[] b = BitConverter.GetBytes(f);

这会产生一个奇怪的结果。b 将是 { 0xBF, 0x04, 0xCE, 0xFF }

我猜这是因为 f 的值是 NaN。我问这个问题的原因是因为我使用 Marsal 将字节流转换为包含浮点数的结构,我交换字节序

问题是当我到达现场时已经搞砸了(就像上面的例子)

有任何想法吗?

谢谢!

4

2 回答 2

2

由于您的问题出现在字节序上,我想知道是否检查 NaN 并反转顺序并在必要时设置一个布尔值以将其反转,这会有所帮助:

byte[] input = { 0xBF, 0x04, 0x8E, 0xFF };
bool reversed = false;
float f = BitConverter.ToSingle(input, 0);

if (float.IsNaN(f))
{
    reversed = true;
    f = BitConverter.ToSingle(input.Reverse().ToArray(), 0);
}

byte[] b = BitConverter.GetBytes(f);

if (reversed)
    b = b.Reverse().ToArray();
于 2013-11-28T08:59:23.873 回答
0

这有效:

double f = BitConverter.ToDouble(new byte[] { 0, 0, 0, 0, 0xBF, 0x04, 0x8E, 0xFF }, 0);
byte[] b = BitConverter.GetBytes(f);

这个也可以:

int f = BitConverter.ToInt32(new byte[] { 0xBF, 0x04, 0x8E, 0xFF }, 0);
byte[] b = BitConverter.GetBytes(f);

我相信原因在于单浮点存储。第三个字节 (在转换时由于某种原因{ 0xBF, 0x04, [0x8E to 0xBE] , 0xFF }+4'd 。

4字节的好容器是Int32,我建议你使用它。

于 2013-11-28T08:47:56.283 回答