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'
如何打印打包的价值?
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'
如何打印打包的价值?
>>> 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])
将打印字节字符串的第一个字符(这是一个字符而不是整数)。
你很可能从http://docs.python.org/2/library/struct.html看到 struct.unpack(fmt, string) 。
我 = 包(“我”,'\x04\x00\x00\x00') 打印我
问题是十六进制值转换,我不得不使用 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