python中unpack函数中的不同输出

时间:2013-07-13 07:04:04

标签: python unpack

当我接受来自控制台的字符串输入以及从变量读取字符串输入时,我在python的unpack函数中观察到不同的输出。

我从变量读取字符串输入,输入:

>>> 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

输入字符串相同但输出不同。它是否以不同的方式解释从控制台读取的输入?如何通过从控制台读取数据来获得相同的输入?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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