从struct.pack打印出打包结果

时间:2013-06-10 19:35:40

标签: python pack struct.pack

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'

如何打印打包值?

3 个答案:

答案 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