【问题标题】:Reading hex to double-precision float python将十六进制读取为双精度浮点 python
【发布时间】:2016-12-14 09:10:29
【问题描述】:

我正在尝试在 Python 中将 unpack 十六进制字符串转换为双精度。当我尝试解压缩以下内容时:

unpack('d', "4081637ef7d0424a");

我收到以下错误:

struct.error: unpack 需要一个长度为 8 的字符串参数

这对我来说没有多大意义,因为双精度数是 8 个字节长,并且

2 个字符 = 1 个十六进制值 = 1 个字节

所以本质上,一个 8 字节长的 double 将是一个 16 个字符的十六进制字符串。

【问题讨论】:

  • struct.unpack 期望的“字符串”不是十六进制字符串,而是原始字节。在 Python3 中,它将是 bytes,而不是 str。使用bytearray.fromhex 或只使用str.decode,请参阅 Sven Marnach 的回答。

标签: python hex


【解决方案1】:

您需要先将十六进制数字转换为二进制字符串:

struct.unpack('d', "4081637ef7d0424a".decode("hex"))

struct.unpack('d', binascii.unhexlify("4081637ef7d0424a"))

后一个版本适用于 Python 2 和 3,前一个版本仅适用于 Python 2

【讨论】:

  • @L3viathan binascii 不需要第三方库。它是 Python 标准库的一部分,在 CPython 上它甚至被编译到解释器中,所以它在解释器启动时就已经导入了。
【解决方案2】:

试试这个:

a = "\x40\x81\x63\x7e\xf7\xd0\x42\x4a"
unpack('d', a);

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 2016-09-24
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多