Je vois des résultats différents lorsque j'utilise ctypes et Structure (s) avec des types petits et grands endian-ness, et des champs avec des longueurs de bits spécifiques. Je m'attendrais à ce que le bit d'ordre dans un octet soit le même pour les deux endia-ness, mais les résultats fournissent des réponses différentes. Les résultats proviennent d'une distribution de centos 6.8 64 bits sur une boîte Intel.ctypes bigendianstructure littlendianstructure renvoie des résultats différents pour un seul octet
>>> import ctypes
>>>
>>> class header_struct(ctypes.Structure):
... _fields_ = [ ('f1',ctypes.c_ubyte,4),
... ('f2',ctypes.c_ubyte,4) ]
...
>>> class header_struct_be(ctypes.BigEndianStructure):
... _fields_ = [ ('f1',ctypes.c_ubyte,4),
... ('f2',ctypes.c_ubyte,4) ]
...
>>> class header_struct_le(ctypes.LittleEndianStructure):
... _fields_ = [ ('f1',ctypes.c_ubyte,4),
... ('f2',ctypes.c_ubyte,4) ]
...
>>> a='\x0A'
>>> x=header_struct.from_buffer_copy(a)
>>> x_be=header_struct_be.from_buffer_copy(a)
>>> x_le=header_struct_le.from_buffer_copy(a)
>>>
>>> print " sizeof(x) ", ctypes.sizeof(x)
sizeof(x) 1
>>> print " sizeof(x_be) ", ctypes.sizeof(x_be)
sizeof(x_be) 1
>>> print " sizeof(x_le) ", ctypes.sizeof(x_le)
sizeof(x_le) 1
>>>
>>> x.f1
10
>>> x_be.f1
0
>>> x_le.f1
10
>>>
>>>
>>> x.f2
0
>>> x_be.f2
10
>>> x_le.f2
0
>>>
Meh, ce sont en effet des résultats non intuitifs Je me demande qui a downvoted la question. – jsbueno