Ich sehe unterschiedliche Ergebnisse, wenn Ctypes und Struktur (en) mit großen und kleinen Endian-Ness-Typen und Feldern mit bestimmten Bitlängen verwendet werden. Ich würde erwarten, dass die Bitordnung in einem Byte für beide Endigungen gleich ist, aber die Ergebnisse liefern unterschiedliche Antworten. Die Ergebnisse stammen von einer Centos 6.8 64 Bit Distribution auf einer Intel Box.ctypes bigendianstructure lindendianstructure gibt verschiedene Ergebnisse für einzelnes Byte zurück
>>> 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, das sind in der Tat nicht intuitive Ergebnisse Ich frage mich, wer die Frage abgelehnt hat. – jsbueno