我正在尝试在Python中将一个十六进制字符串解包成一个双精度浮点数。当我尝试解包以下内容时:
unpack('d', "4081637ef7d0424a");
我遇到了以下错误:
struct.error: unpack需要一个长度为8的字符串参数
这对我来说并不是很有意义,因为double类型的长度为8字节,
2个字符 = 1个十六进制值 = 1个字节
因此,长度为8字节的double类型应该是一个16个字符的十六进制字符串。
您需要首先将十六进制数字转换为二进制字符串:
struct.unpack('d', "4081637ef7d0424a".decode("hex"))
或struct.unpack('d', binascii.unhexlify("4081637ef7d0424a"))
后者版本在 Python 2 和 3 上都可运行,而前者只能在 Python 2 上运行。
binascii
不需要第三方库。它是 Python 标准库的一部分,在 CPython 上甚至已经编译到解释器中,因此在解释器启动时已经被导入。 - Sven Marnach试试这个:
a = "\x40\x81\x63\x7e\xf7\xd0\x42\x4a"
unpack('d', a);
struct.unpack
函数所期望的“字符串”并非十六进制字符串,而是原始字节。在 Python3 中,它应该是bytes
而不是str
。可以使用bytearray.fromhex
或者仅仅使用str.decode
,请参考 Sven Marnach 的回答。 - L3viathan