2013-07-13 26 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