0

当我接受来自控制台的字符串输入以及从变量读取字符串输入时,我在 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

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

4

2 回答 2

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
于 2013-07-13T07:14:52.390 回答
0

好像你在解压错误的数据......

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

您的调用sys.stdin.read(4)仅读取 4 个字符:\x和.0d

>>> import sys
>>> import struct
>>> value = raw_input().decode('string-escape')
\x0d\x00\x00\x00
>>> print struct.unpack("I", value)[0]
13
于 2013-07-13T07:17:48.120 回答