2013-07-13 59 views
0

當我接受來自控制檯的字符串輸入以及當我從變量讀取字符串輸入時,我在python的解壓函數中觀察到不同的輸出。Python中的解壓縮函數中的不同輸出

我從可變讀取字符串輸入,輸入:

>>> import struct 
>>> input="\x0d\x00\x00\x00" 
>>> print struct.unpack("I",input)[0] 
13 

我從控制檯讀取的字符串輸入:

>>> import sys 
>>> import struct 
>>> print struct.unpack("I",sys.stdin.read(4))[0] 
\x0d\x00\x00\x00 
1680898140 

輸入字符串是相同的,但輸出是不同的。它是否以不同的方式解釋從控制檯讀取的輸入?如何通過從控制檯讀取數據來獲得相同的輸入?

+0

問題是,爲什麼你在第二個例子中輸入字面Python轉義碼?在第一個示例中,您正在創建一個Python字符串文字,這意味着Python首先會解釋轉義代碼。 –

回答

1

"\x0d\x00\x00\x00"(從第一碼)是從r"\x0d\x00\x00\x00"從第二碼(== "\\x0x\\x00\x00\x00")不同。

>>> struct.unpack("I", '\x0d\x00\x00\x00')[0] 
13 
>>> struct.unpack("I", r'\x0d\x00\x00\x00'[:4])[0] 
1680898140 

嘗試以下操作:

>>> struct.unpack("I", sys.stdin.readline().decode('string-escape')[:4])[0] 
\x0d\x00\x00\x00 
13 
0

好像你拆包錯誤的數據...

>>> struct.unpack('I','\\x0d')[0] 
1680898140 

您到sys.stdin.read(4)電話只讀取4個字符:\x0d

>>> import sys 
>>> import struct 
>>> value = raw_input().decode('string-escape') 
\x0d\x00\x00\x00 
>>> print struct.unpack("I", value)[0] 
13