我有Big Endian格式的传入数据
uint8_t u8DataA[] = {0x40, 0xAD, 0x70, 0xB8};
需要解压缩到 float 。结果应 3768.36 。无论我如何将字节填入浮点数我都不会得到这个结果。我该怎么做?
答案 0 :(得分:2)
您获得了64位double
表示的前四个字节,而不是32字节表示的四个字节。
根据IEEE 754计算器,3768.36
的64位表示是
0x40, 0xAD, 0x70, 0xB8, 0x51, 0xEB, 0x85, 0x1F
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
This is what you have This part is missing
您取了它的前四个字节,并尝试将其重新解释为float
。这就是为什么它不起作用。
3768.36
的32位表示是
0x45, 0x6B, 0x85, 0xC3
通过将字节填充到数组中并将其重新解释,将其转换为float
,生成所需的结果(demo)。
答案 1 :(得分:0)
直接将这些十六进制数传递给十进制将是无用的。如果你知道如何将十进制数转换为float,只需尝试将这些十六进制数转换为二进制数,并且一旦你有一个完整的二进制数(例如:0000 1111 0010 1101 1111 1110 0001 0010.将它作为一个字符串将有助于,但我不知道哪些函数或多少函数允许你使用二进制数)你只需要提取指数,符号和尾数。如果您不知道如何将整数转换为浮点数,请浏览互联网并为您选择最佳教程。请记住,一旦你将二进制数作为字符串,取标志,尾数和指数并不困难。如果你有某种将二进制转换为十进制的函数,你可以轻松地处理它。