在Python中将0x字符串解释为十六进制
我正在往一个叫做 packet = []
的列表里添加一些十六进制的字节,我想把这些字节以 0x__
的形式返回,作为十六进制数据。
packet.append("2a")
packet.append("19")
packet.append("00")
packet.append("00")
packHex = []
for i in packet:
packHex.append("0x"+i) #this is wrong
return packHex
我该怎么把 ('2a', '19', '00', '00')
这个元组里的内容转换成 (0x2a, 0x19, 0x0, 0x0)
,并放到 packHex
里呢?我需要的是实际的十六进制数据,而不是看起来像十六进制的数据的字符串。
我正在组装一个要通过 pcap
发送的数据包,使用 pcap_sendpacket(fp,packet,len(data))
,其中 packet
应该是一个十六进制的列表或元组,虽然我没有尝试过用十进制,但我更喜欢用十六进制。谢谢你的回答。
packetPcap[:len(data)] = packHex
解决方案:
for i in packet: packHex.append(int(i,16))
如果需要以十六进制输出,可以使用这个命令:
print ",".join(map(hex, packHex))
2 个回答
5
其实你并不需要“十六进制数据”,你需要的是整数。十六进制表示法只有在你把数字当作字符串时才有意义。
要解决你的问题,可以使用列表推导式:
[int(x, 16) for x in packet]
或者如果你想把结果作为一个元组返回:
tuple(int(x, 16) for x in packet)
4
你为什么不直接创建一个整数的列表,然后把它们以16进制的形式打印出来呢?你可以用 "%x"%value
或者 hex
来实现。如果这些值是以这种形式给你的(比如来自其他地方),你可以使用 int
函数,配合可选的第二个参数,把它们转换成整数。
>>> int('0x'+'2a',16)
42
>>> packet=["2a","19","00","00"]
>>> packet=[int(p,16) for p in packet]
>>> packet
[42, 25, 0, 0]
>>> print ", ".join(map(hex,packet))
0x2a, 0x19, 0x0, 0x0