struct.pack从输入值返回打包结果。
In [19]: pack("i",4)
Out[19]: '\x04\x00\x00\x00'
我正在尝试按如下方式打印出打包结果:
val = pack("i", 4)
print "%d" % int(val[0])
但是,我得到了ValueError:
ValueError: invalid literal for int() with base 10: '\x04'
如何打印打包值?
答案 0 :(得分:1)
>>> import struct
>>> print struct.unpack("i", struct.pack("i",4))[0]
4
答案 1 :(得分:0)
基于:http://docs.python.org/2/library/struct.html
Python将结构打包为字节字符串,打印:
print "%d" % int(val[0])
将打印字节字符串的第一个字符(这是一个字符不是整数)。
你可以从http://docs.python.org/2/library/struct.html看看struct.unpack(fmt,string)。
i = pack("i",'\x04\x00\x00\x00') print i
答案 2 :(得分:0)
问题是十六进制值转换,我不得不使用ord()方法。 int()方法仅适用于基数为10的字符串中的数字。
In [33]: int('4')
Out[33]: 4
In [34]: ord('\x34')
Out[34]: 52
In [35]: ord('4')
Out[35]: 52
In [36]: ord('\x10')
Out[36]: 16
所以,这段代码可行。
val = pack("i", 4)
print "%d" % ord(val[0]) # -> 4
或
print "%s" % hex(ord(val[0])) # -> 0x4