Python struct.pack删除一个字节。

时间:2013-10-11 15:50:49

标签: python python-3.x struct

如果我使用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'

谁能告诉我丢失的字节在哪里?

1 个答案:

答案 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'