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

sou*_*kah 3 python types casting

我将一些十六进制字节附加到a中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
Run Code Online (Sandbox Code Playgroud)

我该如何去有关转换('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))

Mar*_*ers 5

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

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

[int(x, 16) for x in packet]
Run Code Online (Sandbox Code Playgroud)

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

tuple(int(x, 16) for x in packet)
Run Code Online (Sandbox Code Playgroud)

  • 这只是代表.整数是数字.十六进制和十进制以及八进制是表示数字的方式.`0x34`和`52`是*相同的数字*.如果你想用十六进制打印*数字,那就完全不同了,那就是'x'字符串格式出现的地方. (2认同)