【问题标题】:Python struct.unpack byte length issuesPython struct.unpack 字节长度问题
【发布时间】:2020-10-15 01:43:27
【问题描述】:

我有以下代码:

msg = b'0,[\x00\x01\x86\xec\x96N'
print(struct.unpack("<"+"I",msg))

但是每次我尝试这样做时它都会说

struct.error: unpack 需要 4 个字节的缓冲区

我试图做的是以下

times = int(len(msg)/4)
 struct.unpack("<"+"I" * times,msg)

但它并不总是有效,我认为在奇数上,我怎样才能获得正确的尺寸,这样我就不会遇到这些问题?

【问题讨论】:

    标签: python python-3.x struct byte endianness


    【解决方案1】:

    struct.unpack 要求使用的缓冲区长度恰好格式的大小。 [1]

    请改用struct.unpack_from,这要求使用的缓冲区长度至少是格式的大小。 [2]

    >>> msg = b'0,[\x00\x01\x86\xec\x96N'
    
    >>> import struct
    >>> print(struct.unpack("<"+"I", msg))
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    struct.error: unpack requires a buffer of 4 bytes
    
    >>> print(struct.unpack_from("<"+"I", msg))
    (5975088,)
    

    unpack_from 将忽略额外的字节

    [1]https://docs.python.org/3/library/struct.html#struct.unpack
    [2]https://docs.python.org/3/library/struct.html#struct.unpack_from

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2019-07-16
      • 2021-01-10
      • 2013-12-24
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多