为什么十六进制给出的输出与Python中索引到字节的输出不同?

问题描述 投票:0回答:1

我试图确认该结构的格式是否正确以适应网络字节顺序,但是打印出字节并打印出字节的十六进制给了我不同的输出,十六进制是预期的输出。但我不知道为什么他们不一样。

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
python hex byte
1个回答
0
投票

顺序正确。 区别在于字节如何显示

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'
© www.soinside.com 2019 - 2024. All rights reserved.