读取十六进制转为双精度浮点数 Python

8

我正在尝试在Python中将一个十六进制字符串解包成一个双精度浮点数。当我尝试解包以下内容时:

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

我遇到了以下错误:
struct.error: unpack需要一个长度为8的字符串参数
这对我来说并不是很有意义,因为double类型的长度为8字节,
2个字符 = 1个十六进制值 = 1个字节
因此,长度为8字节的double类型应该是一个16个字符的十六进制字符串。

struct.unpack 函数所期望的“字符串”并非十六进制字符串,而是原始字节。在 Python3 中,它应该是 bytes 而不是 str。可以使用 bytearray.fromhex 或者仅仅使用 str.decode,请参考 Sven Marnach 的回答。 - L3viathan
2个回答

11

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

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

后者版本在 Python 2 和 3 上都可运行,而前者只能在 Python 2 上运行。


1
@L3viathan binascii 不需要第三方库。它是 Python 标准库的一部分,在 CPython 上甚至已经编译到解释器中,因此在解释器启动时已经被导入。 - Sven Marnach

0

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接