我将一些十六进制字节附加到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
?我需要真正的十六进制数据,而不是看起来像十六进制数据的字符串。
我正在汇总要通过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))
答案 0 :(得分:5)
你真的不想要'十六进制数据',你想要整数。只有当数字表示为字符串时,十六进制表示法才有意义。
要解决您的问题,请使用列表解析:
[int(x, 16) for x in packet]
或者将结果作为元组获得:
tuple(int(x, 16) for x in packet)
答案 1 :(得分:3)
为什么不构建一个list
int
的{{1}}并在基数16中打印出来(使用"%x"%value
或hex
)?如果以这种形式(例如来自其他来源)向您提供了值,则可以将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