在Python中将0x字符串解释为十六进制

时间:2010-10-29 13:28:08

标签: python types casting

我将一些十六进制字节附加到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')中的packet转换为(0x2a, 0x19, 0x0, 0x0)中的packHex?我需要真正的十六进制数据,而不是看起来像十六进制数据的字符串。

我正在汇总要通过pcappcap_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 个答案:

答案 0 :(得分:5)

你真的不想要'十六进制数据',你想要整数。只有当数字表示为字符串时,十六进制表示法才有意义。

要解决您的问题,请使用列表解析:

[int(x, 16) for x in packet]

或者将结果作为元组获得:

tuple(int(x, 16) for x in packet)

答案 1 :(得分:3)

为什么不构建一个list int的{​​{1}}并在基数16中打印出来(使用"%x"%valuehex)?如果以这种形式(例如来自其他来源)向您提供了值,则可以将int与可选的第二个参数一起使用,将其转换为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