从struct.p打印出包装结果

2024-05-15 08:34:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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'

如何打印打包值?


Tags: inforbasewithvaloutpackint
3条回答

问题是十六进制值转换,我不得不使用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
>>> import struct
>>> print struct.unpack("i", struct.pack("i",4))[0]
4

基于:http://docs.python.org/2/library/struct.html

Python将结构打包为字节字符串,打印: print "%d" % int(val[0]) 将打印字节字符串的第一个字符(不是整数的字符)。

你看起来很像struct.unpack(fmt,string)来自http://docs.python.org/2/library/struct.html

i = pack("i",'\x04\x00\x00\x00')
print i

相关问题 更多 >