python - 十六进制十进制浮点Python

标签 python base-conversion

我正在从二进制文件中读取数据。我有一份文件可以让我知道信息是如何存储的。为了确保这一点,我使用 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.xhtmlhttp://www.binaryconvert.com/result_float.html?decimal=048046048054049048056055 , 但所有这些方式根据原始结果给我带来了不同的值(value)。

我开始怀疑 float 信息被加密或类似的东西,但为什么 string 和 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

关于python - 十六进制十进制浮点Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694352/

相关文章:

algorithm - 仅使用 O(lg β) 次乘法和除法将 β 位整数转换为数字数组

python - MacOS X 上的基本 pyinstaller

python - 处理大数据集进行图像分类

python - wxPython:我应该如何在 Controller 中组织每个小部件数据?

java - 十进制到二进制的转换

python - 如何将字符串转换为其 Base-10 表示形式?

python - 函数参数名以下划线开头

python - 表单中的数据未插入到用户表中

php - 如何在 PHP 中将 base64 转换为 base10?

c - 覆盖C中的字符串