2016-12-28 55 views
-1

我正在使用python中的結構庫。我在使用struct library的包函數時遇到過一件不尋常的事情。在Ubuntu上測試。我檢查了ASCII表,我發現TAB和換行符分別具有ASCII值9和10。但爲什麼其他價值觀沒有顯示出這樣的等同性格?爲什麼在python的struct.pack(「B」,9)和struct.pack(「B」,10)中產生' t'和' n'作爲輸出?

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' 

回答

1

這有絕對無關的結構模塊:它的字符串對象的repr()只是如何選擇顯示不可打印的字符。

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

雖然所有的控制字符都有名稱,但其中大多數只有歷史意義。只有少數具有一致含義的Python在Python(和大多數其他語言)中具有單字符反斜槓轉義序列;爲方便起見,Python在顯示字符串時使用這些轉義序列,而不是通用十六進制轉義符。

1

因爲存在用於0,8沒有等效字符,和11

它不是sruct.pack這是問題,它是比特模式的表示,當它被轉換成一個字符串。如果在交互式會話中輸入struct.pack("B",10),那麼python必須轉換爲字符串,在這種情況下,它使用__repr__()來執行此操作。 print,在另一方面,使用__str__()並可能會給出不同的結果:

嘗試:

print struct.pack("B",10) 

你會得到一個顯示空行。請始終記住,顯示任何對象只會顯示值的文本表示形式。

相關問題