使用bytearray的struct.unpack

2024-04-18 14:43:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个在字节数组上使用struct.unpack的应用程序。使用Python2.7.5在我的机器上运行它,效果很好:

>>> data
bytearray(b'\x07\x00\x00\x00\x00\x00\x00\x00')
>>> struct.unpack("<Q", data)   
(7,)

但是,我尝试在python版本2.7.3中使用它时出现了一个异常:

error: unpack requires a string argument of length 8

在解包之前,我需要显式地将bytearray转换为string。这与python版本更改有关吗?关于这个,struct manual什么也没说。。我想避免做所有的演员,有办法吗?


Tags: 版本机器应用程序datastring字节error数组
2条回答

正如您所注意到的,这与Python版本有关。显然struct.unpack在版本2.7.3之后被修复或扩展。

如果您的脚本必须同时使用2.7.5和2.7.3版本,并且您已经找到了在两个版本上运行它的方法(通过强制转换为字符串),那么您可以将工作区代码和对struct.unpack的调用一起放入一个函数中,并调用此函数,而不是在需要的任何地方直接执行struct.unpack的强制转换和调用。这样您的代码将保持优雅、简短和DRY

此外,还可以用字节包装bytearray对象:

>>> data
bytearray(b'\x07\x00\x00\x00\x00\x00\x00\x00')
>>> struct.unpack("<Q", bytes(data))   
(7,)

对Python3也有效。

相关问题 更多 >