我正在从二进制文件中读取数据。我有一个文档,让我知道如何存储信息。为了确保这一点,我使用XVI32。
我正在正确地提取信息字符串和int数据,直到我碰到了float数据类型。
根据这个档案:
00800000 = 0.0
7AFBDD35 = 0.061087
9BF7783C = -0.003491
00FBFCAD = 0.031416
我试图用以下方法解决这个问题:
struct.unpack('!f', my_float.decode('hex'))[0]
和其他不同的方式......
我使用以下在线工具测试了这些信息: http://babbage.cs.qc.cuny.edu/IEEE-754/index.xhtml和http://www.binaryconvert.com/result_float.html?decimal=048046048054049048056055,但根据原始结果,所有这些方式都会让我产生不同的价值。
我开始怀疑浮动信息是加密的还是类似的但是为什么string和int没有加密?
答案 0 :(得分:2)
有趣的谜题。使用文档我提出了这个:
def byteswap(x):
return ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8)
def tms320_float(raw):
s = (raw >> 23) & 1
mantissa = (raw & 0x007fffff)
exponent = raw >> 24
if exponent >= 128:
exponent -= 256
if exponent == -128:
return 0.0
return (((-2) ** s) + float(mantissa) / float(1 << 23)) * (2.0 ** exponent)
>>> tms320_float(byteswap(0x00800000))
0.0
>>> tms320_float(byteswap(0x7AFBDD35))
0.06108652427792549
>>> tms320_float(byteswap(0x9BF7783C))
-0.003490658476948738
>>> tms320_float(byteswap(0x00FBFCAD))
0.031415924429893494
答案 1 :(得分:1)
我的老板给我发了答案,浮点数据不是IEEE格式。
数据类型是TMS320浮点
由于某种原因,十六进制数据的实际值每2个字节混合,我的意思是:
80000000 = 0.0
FB7A35DD = 0.061087
F79B3C78 = -0.003491
FB00ADFC = 0.031416
谢谢你支持我们