【问题标题】:struct.unpack with bytearray'sstruct.unpack 与 bytearray 的
【发布时间】:2014-01-03 22:36:42
【问题描述】:

我编写了一个在字节数组上使用struct.unpack 的应用程序。使用 python 2.7.5 在我的机器上运行它运行良好:

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

但是,我尝试将它与 python 版本 2.7.3 一起使用,但出现异常:

错误:解包需要长度为 8 的字符串参数

我需要在解包之前将字节数组显式转换为字符串。这与python版本更改有关吗? struct manual 对此只字未提。我想避免做所有的演员,有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: python python-2.7 bytearray unpack


    【解决方案1】:

    另外,你可以用字节包装 bytearray 对象:

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

    它也适用于 Python3。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-08-16
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多