为什么在python struct.pack(" B",9)和struct.pack(" B",10)产生' \ t'和' \ n'作为输出?

时间:2016-12-28 14:00:07

标签: python python-2.7

我在python中使用struct库。在使用struct library的pack函数时,我遇到了一个不寻常的事情。在ubuntu中测试过。我检查了ASCII表,我发现TAB和换行符分别具有ASCII值9和10。但是为什么其他值没有显示出这样的等价字符?

import struct
struct.pack("B",0)
'\x00'

struct.pack("B",8)
'\x08'

struct.pack("B",9)
'\t' # why ???    

struct.pack("B",10)
'\n' # why ????

struct pack("B",11)
'\x0b'

2 个答案:

答案 0 :(得分:1)

这与struct模块完全无关:它只是repr()字符串对象选择显示不可打印字符的方式。

>>> [chr(i) for i in range(8,12)]
['\x08', '\t', '\n', '\x0b']

虽然所有控制角色都有名称,但大多数只具有历史意义。在Python(以及大多数其他语言)中,只有少数具有一致含义的单字符反斜杠转义序列;为方便起见,Python在显示字符串时使用这些转义序列,而不是通用的十六进制转义。

答案 1 :(得分:1)

因为0,8和11没有等效字符。

问题不是sruct.pack,它是转换为字符串时位模式的表示。如果在交互式会话中输入struct.pack("B",10),则python必须转换为字符串,在这种情况下,它使用__repr__()来执行此操作。另一方面,print使用__str__()并可能会给出不同的结果:

尝试:

print struct.pack("B",10)

您将显示一个空白行。永远记住,显示任何对象只显示值的文本表示。