在python中替换和搜索行中的十六进制

2024-04-19 01:22:55 发布

您现在位置:Python中文网/ 问答频道 /正文

问题如下:
我在做一件事文件.read(100)得到一条直线,如下所示:

line='1\x01\x1e17=00000000\x1e54=80300A00\x1e50=1\x1e56=2008080106010414\x1c\x1e247=CD\x1e6=In\x1e5=Boot\x1e180=0.445\x1e179=0.380\x1e55=AAA\x1e57=2008080100000000\x1e212=5000\x1e213=20000\x1e115=500\x1d\x1e29=5T2lqZHNAwg=\x01\x1e17=00000000'

我要做的是在这一行中搜索十六进制数,并将它们转换为新操作的行。
所以基本上我想做:

t=re.findall(r'[\x80-\xff]', line) #Somehow get the positions    
for i in t: ord(i) #Something to this effect to replace all the hexadecimals it finds  

使用我为t编写的代码,我找不到行中的所有字符,更不用说它们的位置了。
我想知道是否有人对如何最好地解决这个问题有什么想法。谢谢。你知道吗


Tags: 文件thetoreadlinecd直线x01
2条回答

\x是一个转义x,这是一个无效的转义。你的问题不是正则表达式,而是你的编码你的line不是一个文本字符串。试试printing line,您应该会看到以下内容:

117=0000000054=80300A0050=156=2008080106010414247=CD6=In5=Boot180=0.445179=0.38055=AAA57=2008080100000000212=5000213=20000115=50029=5T2lqZHNAwg=17=00000000

很可能,这就是你需要的。简而言之,十六进制值就是这样。你知道吗

如果在此之后,您仍然希望获得十六进制值,则必须在字符串的开头添加一个r,如下所示:

line=r'1\x01\x1e17=00000000\x1e54=80300A00\x1e50=1\x1e56=2008080106010414\x1c\x1e247=CD\x1e6=In\x1e5=Boot\x1e180=0.445\x1e179=0.380\x1e55=AAA\x1e57=2008080100000000\x1e212=5000\x1e213=20000\x1e115=500\x1d\x1e29=5T2lqZHNAwg=\x01\x1e17=00000000'

使其成为字符串文字。Regex应该像处理其他字符串一样处理文本。你知道吗

您可以找到字符\x(以及[0]和[len(t)-1]的所有索引,然后遍历该列表并成对地进行切片,如len(t)中i的ord(t[i:i+1])

相关问题 更多 >