更好的写法:
byte[] bytes = new byte[]{ 0x42, 0xE6, 0x56, 0x00 }; // Big endian data
if (BitConverter.IsLittleEndian) {
Array.Reverse(bytes); // Convert big endian to little endian
}
float myFloat = BitConverter.ToSingle(bytes, 0);
请注意,BitConverter
使用平台的字节序。
我用IEEE-754 Analysis测试过,看来你的源数据真的是大端,所以这是正确的写法。
你可能不知道,但BitConverter.GetBytes(0x42E65600);
会byte[]{ 0x00, 0x56, 0xE6, 0x42 }
在 little endian 平台上。
如果您坚持编写十六进制文字,则无需转换字节顺序(因为它始终是正确的,请参阅@George 的评论)
byte[] bytes = BitConverter.GetBytes(0x42E65600);
float myFloat = BitConverter.ToSingle(bytes, 0); // Always be correct