【发布时间】:2013-11-28 08:20:37
【问题描述】:
请检查此代码
float f = BitConverter.ToSingle(new byte[] { 0xBF, 0x04, 0x8E, 0xFF }, 0);
byte[] b = BitConverter.GetBytes(f);
这会产生一个奇怪的结果。 b 将是 { 0xBF, 0x04, 0xCE, 0xFF }
我猜是因为 f 的值是 NaN。 我问这个问题的原因是因为我使用 Marsal 将字节流转换为包含浮点数的结构,我交换字节序
问题是当我到达现场时已经搞砸了(就像上面的例子)
有什么想法吗?
谢谢!
【问题讨论】:
-
在转换为浮点数之前更改字节序
-
我不能。我正在将 byte[] 转换为 struct,在那个阶段我不知道它的内部结构。
-
@harold 如果您在两个方向上都使用
BitConverter,则不必担心字节顺序 - 实际上,如果字节被反转,那将是问题,而不是如果它们只是变异了 -
@MarcGravell 这次是个问题,因为原始输入(即
{ 0xBF, 0x04, 0x8E, 0xFF })是错误的。这产生了一个 NaN,然后事情开始向南发展。 -
@TheDude 请澄清一下,这个值 supposed 是 NaN 吗?或类似 -0.51780695
标签: c# floating-point marshalling bitconverter