为什么python的struct认为little-endian和big-endian意味着不同的长度?

Tho*_*son 1 python byte struct endianness

我认为little-endian和big-endian数字大小相同(以字节为单位).但python 2.7的struct模块说明了这一点:

In [46]: struct.unpack('>L', datalen[4:8])[0]
Out[46]: 35098131

In [47]: struct.unpack('L', datalen[4:8])[0]
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-47-f18e2a303d6c> in <module>()
----> 1 struct.unpack('L', datalen[4:8])[0]

error: unpack requires a string argument of length 8
Run Code Online (Sandbox Code Playgroud)

为什么big endian长4个字节但struct期望little-endian长为8个字节?

Woo*_*ble 6

指定'L'没有><不是"小端"; 它的原生字节序原生大小.标准大小为4个字节,但机器的原始大小为8.

如果您明确需要标准大小的little-endian,请使用:

struct.unpack('<L', datalen[4:8])[0]
Run Code Online (Sandbox Code Playgroud)

  • + 1哇,我想知道有多少人(或有一天会......)被这样刺痛了.FWIW,因为你让我读了文档,''= L'`是标准大小/本机端."本机大小"是机器架构固有的还是由您的c编译器决定的? (2认同)