如果我使用 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'
谁能告诉我丢失的字节去了哪里?
如果我使用 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'
谁能告诉我丢失的字节去了哪里?
你丢失的字节就在那里;\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'