我已尝试使用以下C#代码将 hex literal转换为浮点并获得正确的结果。我希望输入一个字节数组,并将其转换为浮点数,但似乎无法得到正确的结果。
0x4229ec00
是当前格式。我需要byte array
格式的东西... ...
new byte[]{ 0x01, 0x04, 0x01, 0x60, 0x00, 0x02, 0x70, 0x29}; //current output 42.48
代码如下:
byte[] bytes = BitConverter.GetBytes(0x4229ec00);
float myFloat = floatConversion(bytes);
public float floatConversion(byte[] bytes)
{
float myFloat = BitConverter.ToSingle(bytes, 0);
return myFloat;
}
非常感谢任何帮助。谢谢!
答案 0 :(得分:4)
您可以修改浮动转换功能,如下所示
public float floatConversion(byte[] bytes)
{
if (BitConverter.IsLittleEndian)
{
Array.Reverse(bytes); // Convert big endian to little endian
}
float myFloat = BitConverter.ToSingle(bytes, 0);
return myFloat;
}
答案 1 :(得分:2)
float (Single
)是 4 Byte 值;
您的测试值 0x4229ec00 包含4个字节,它们是: 0x42,0x29,0xEC,0x00
x86 CPU使用反向顺序字节( Little Endian ),因此右字节数组是
0x00, 0xEC, 0x29, 0x42
守则
// Original array
Byte[] data = new Byte[] {0x42, 0x29, 0xEC, 0x00};
// 42.48047
// If CPU uses Little Endian, we should reverse the data
float result = BitConverter.ToSingle(BitConverter.IsLittleEndian? data.Reverse().ToArray() : data, 0);