不同的結果,我使用的具有特定位長度的ctypes和大和小字節序的結構類型(S)和字段時看到不同的結果。我希望字節中的位排序對於兩個endianes都是一樣的,但結果提供了不同的答案。結果來自intel盒子上的一個6.8,64位的發行版。ctypes的bigendianstructure littlendianstructure返回單字節
>>> 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
>>>
咩,這確實是不直觀的結果我不知道誰downvoted的問題。 – jsbueno