我试图确认该结构的格式是否正确以适应网络字节顺序,但是打印出字节并打印出字节的十六进制给了我不同的输出,十六进制是预期的输出。但我不知道为什么他们不一样。
import ctypes
class test_struct(ctypes.BigEndianStructure):
_pack_ = 1
_fields_ = [ ('f1', ctypes.c_ushort, 16) ]
foo = test_struct()
foo.f1 = 0x8043
bs = bytes(foo)
print(str(bs[0:1]) + " " + str(bs[1:2]))
print(bs.hex(' '))
输出是
b'\x80' b'C'
80 43
顺序正确。 区别在于字节如何显示。
bytes
对象的默认显示是b'X'
,其中X是该字节的可打印ASCII字符、转义字符(\t\r\n
)或十六进制转义(\xhh
)。
如果迭代
bytes
对象,则值为 0-255 之间的整数。 这些整数可以以您喜欢的任何方式显示,例如:
import ctypes
class test_struct(ctypes.BigEndianStructure):
_fields_ = ('f1', ctypes.c_ushort),
foo = test_struct(0x8043)
for b in bytes(foo):
# decimal integer (default), hexadecimal integer, and 1-byte `bytes` object.
print(f'{b:3} 0x{b:02x} {bytes([b])}')
输出:
128 0x80 b'\x80'
67 0x43 b'C'