разные результаты в функции распаковки в 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

Входная строка та же, но вывод отличается. Интерпретирует ли он ввод, считанный с консоли, по-другому? Как я могу получить тот же ввод, прочитав данные с консоли?


person Neon Flash    schedule 13.07.2013    source источник
comment
Вопрос в том, почему вы вводите буквальные escape-коды Python во втором примере? В вашем первом примере вы создаете строковый литерал Python, что означает, что Python сначала интерпретирует escape-коды.   -  person Martijn Pieters    schedule 13.07.2013


Ответы (2)


"\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
person falsetru    schedule 13.07.2013

похоже, вы распаковываете неправильные данные...

>>> 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
person dnozay    schedule 13.07.2013