Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将0x字符串解释为十六进制_Python_Types_Casting - Fatal编程技术网

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

在Python中将0x字符串解释为十六进制,python,types,casting,Python,Types,Casting,我正在将一些十六进制字节附加到数据包=[]中,并且我希望以0x\uuu的形式返回这些十六进制字节作为十六进制数据 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

我正在将一些十六进制字节附加到
数据包=[]
中,并且我希望以
0x\uuu
的形式返回这些十六进制字节作为十六进制数据

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)
?我需要真正的十六进制数据,而不是看起来像十六进制数据的字符串

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

我正在组装一个数据包,通过
pcap
pcap\u sendpacket(fp,packet,len(data))
发送,其中
packet
对我来说应该是十六进制列表或元组,也许可以用十进制完成,还没有尝试过,我更喜欢十六进制。谢谢你的回答

packetPcap[:len(数据)]=packHex

已解决:

对于数据包中的i:packHex.append(int(i,16))

如果需要十六进制输出,可以使用以下命令:
print“,”.join(map(hex,packHex))

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

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

[int(x, 16) for x in packet]
或以元组形式获取结果:

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

为什么不直接建立一个
列表
int
s,然后用16进制打印出来(或者使用
%x”%value
或者
十六进制
)?如果值是以这种形式提供给您的(例如,来自其他来源),您可以使用
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

不,这不是十六进制值,而是十进制值。这只是表示法。整数是数字。十六进制、十进制和八进制是表示数字的方式
0x34
52
是相同的数字。如果你想用十六进制打印数字,那完全是另一回事,这就是“x”字符串格式的由来。谢谢你的回答和建议。事情现在已经解决了。抱歉没有接受你的回答@Mark,我喜欢@MAK提供的额外
map
,否则你是第一个直截了当的人。谢谢。还有用于将数字转换为十六进制字符串表示的内置
hex()
,包括前导
0x
。谢谢@Mike,这也非常有用。我正在组装一个数据包,通过
pcap
pcap\u sendpacket(fp,packet,len(data))发送
where
packet
对我来说应该是十六进制列表或元组,也许可以用十进制完成,还没试过,我更喜欢十六进制。谢谢你的回答。@Soulseekah:所有的值都是二进制的。十六进制或十进制仅在打印时将其转换为字符串时表示。所以,像“十六进制数”和“十进制数”这样的区别对于存储在变量中的值是没有意义的。我需要
packetPcap[:len(data)]=packHex
,其中
packHex
包含类似
(0x00,0x1F,0x3C,0x84,0x70,0x22,0x1C,0xAF,0xF7)
。谢谢你的帮助+1
map(十六进制,数据包)
很有趣。所以基本上,不管列表/元组包含十六进制还是十进制,最后都是位。我可以提供
(0x00,39,29,0x32)
,所有内容都将被解析为小数。然后我可以使用
map(hex,
直观地得到hex,以便更好地阅读。谢谢你的回答。@Soulseekah:是的。除了,所有东西都被解析为二进制而不是小数。Python在文本中期望的默认基数是十进制,但即使是在读取后也会转换为二进制。对不起,tryna'保持“真实”…-一分钟前