当我接受来自控制台的字符串输入以及从变量读取字符串输入时,我在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
输入字符串相同但输出不同。它是否以不同的方式解释从控制台读取的输入?如何通过从控制台读取数据来获得相同的输入?
答案 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个字符:\
,x
,0
和d
。
>>> import sys
>>> import struct
>>> value = raw_input().decode('string-escape')
\x0d\x00\x00\x00
>>> print struct.unpack("I", value)[0]
13