我正在从二进制文件中读取数据。我有一个文件,让我知道如何存储信息。要确定我使用xvi32。

我正在正确提取信息字符串和int数据,直到我用浮点数数据类型击落。

根据此文件:

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.xhtmlhttp://www.binaryconvert.com/result_float。HTML?DECIMAL= 0480460480540490480560555 ,但所有这些方式都根据原始结果抛出不同的值。

我开始怀疑浮动信息是加密的或类似的东西,但为什么字符串和int没有加密?

有帮助吗?

解决方案

有趣的拼图。与我提出的文件一起使用:

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
.

其他提示

我的老板发给我答案,浮点数据不是IEEE格式。

数据类型是TMS320浮点

出于某种原因,HEX数据的实际值将混合每个2个字节,我的意思是:

80000000 = 0.0
FB7A35DD = 0.061087
F79B3C78 = -0.003491
FB00ADFC = 0.031416
.

谢谢你的支持我

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top