请检查此代码
float f = BitConverter.ToSingle(new byte[] { 0xBF, 0x04, 0x8E, 0xFF }, 0);
byte[] b = BitConverter.GetBytes(f);
这是一个奇怪的结果。
b将是{0xBF,0x04,0xCE,0xFF}
我猜是因为f的值是NaN。 我之所以提出这个问题,是因为我使用Marsal将字节流转换为包含float的结构,I swap endianity
当我到达场地的时候已经搞砸了(就像上面的例子一样)
任何想法?
谢谢!
答案 0 :(得分:2)
由于您的问题出现在endian中,我想知道是否检查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();
答案 1 :(得分: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
。
4字节的好内容是Int32
,我建议你使用它。