在python中打包和解压缩float值

问题描述 投票:1回答:1

为什么当我尝试打包float对象时python为什么返回“奇数值”?例如:

>>> import struct,time

>>> struct.pack('d', time.time())
b'\xe0LC|\xf6l\xd7A'

>>> struct.unpack('d', b'\xe0LC|\xf6l\xd7A')
(1572067825.051567,)

为什么将值解压缩为元组而不是浮点型?然后,为什么它使用诸如LC|l之类的值-我认为它将以十六进制形式打包项目?

python python-3.x networking struct hex
1个回答
1
投票
解压文档明确指出结果是元组:

根据格式字符串格式从缓冲区缓冲区中解压缩(大概由pack(format,...)打包)。

结果是一个元组,即使它仅包含一项。缓冲区大小(以字节为单位)必须与格式要求的大小匹配,如calcsize()所反映。

您可以通过以下方式查看所有可能字节的表示形式:

for i in range(256): print("{} : {}".format(i, bytes([i])))

例如,124b'|'表示。在您的情况下,b'\xe0LC|\xf6l\xd7A'bytes([224, 76, 67, 124, 246, 108, 215, 65])的表示。
© www.soinside.com 2019 - 2024. All rights reserved.