我在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'
答案 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)
您将显示一个空白行。永远记住,显示任何对象只显示值的文本表示。