简体   繁体   中英

different outputs in unpack function in python

I am observing a different output in the unpack function of python when I accept the string input from the console and when I read the string input from a variable.

I read the string input from the variable, input:

>>> import struct
>>> input="\x0d\x00\x00\x00"
>>> print struct.unpack("I",input)[0]
13

I read the string input from the console:

>>> import sys
>>> import struct
>>> print struct.unpack("I",sys.stdin.read(4))[0]
\x0d\x00\x00\x00
1680898140

The input string is the same but the output is different. Does it interpret the input read from the console in a different way? How can I get the same input by reading the data from console?

"\\x0d\\x00\\x00\\x00" (from the first code) is different from r"\\x0d\\x00\\x00\\x00" (== "\\\\x0x\\\\x00\\x00\\x00" ) from the second code.

>>> struct.unpack("I", '\x0d\x00\x00\x00')[0]
13
>>> struct.unpack("I", r'\x0d\x00\x00\x00'[:4])[0]
1680898140

Try following:

>>> struct.unpack("I", sys.stdin.readline().decode('string-escape')[:4])[0]
\x0d\x00\x00\x00
13

seems like you are unpacking the wrong data...

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

your call to sys.stdin.read(4) reads only 4 characters: \\ , x , 0 and d .

>>> import sys
>>> import struct
>>> value = raw_input().decode('string-escape')
\x0d\x00\x00\x00
>>> print struct.unpack("I", value)[0]
13

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM