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

3 投票
2 回答
18204 浏览
提问于 2025-04-16 06:17

我正在往一个叫做 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

撰写回答