如果我使用Python 3.3.1运行以下命令:
import struct
struct.pack('!Bhh', 1, 1, 10)
我得到了这个结果:
b'\x01\x00\x01\x00\n'
而不是我期待的结果:
b'\x01\x00\x01\x00\x0a\n'
谁能告诉我丢失的字节在哪里?
答案 0 :(得分:3)
你丢失的字节就在那里; \n
是ASCII表中的字符10:
>>> chr(10)
'\n'
不是将其显示为\x0a
,而是显示为Python字符串文字转义码;其他已知的逃生也以这种方式表现出来。可打印的ASCII字符显示为字符:
>>> struct.pack('!Bhh', 1, 1, 13)
b'\x01\x00\x01\x00\r'
>>> struct.pack('!Bhh', 1, 1, 9)
b'\x01\x00\x01\x00\t'
>>> struct.pack('!Bhh', 1, 1, 65)
b'\x01\x00\x01\x00A'
使用binascii.hexlify()
将字节转换为十六进制字符可能会有所帮助:
>>> from binascii import hexlify
>>> hexlify(struct.pack('!Bhh', 1, 1, 10))
b'010001000a'