gpt4 book ai didi

python - 如何在没有python解释的情况下捕获二进制字符串中的所有字符

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:16 25 4
gpt4 key购买 nike

下面是我重现问题的方法:

创建一个名为“temp.log”的日志文件并将此行粘贴到其中

DEBUG: packetReceived '\x61\x62\x63'

我想要一个脚本,它将从日志文件中读取行并解码二进制字符串部分 ('\x61\x62\x63')。对于解码,我使用的是结构,所以:

struct.unpack('BBB', '\x61\x62\x63')

应该给我

(97, 98, 99)

这是我正在使用的脚本

import reimport structimport sysf = open(sys.argv[1], 'r')for line in f:    print line    packet = re.compile(r"packetReceived \'(.*)\'").search(line).group(1)    # packet is the string r'\x61\x62\x63'    assert(len(packet), 12)    # this works ok (returns (97, 98, 99))    struct.unpack('BBB', '\x61\x62\x63')    # this fails because packet is interpreted as r'\\x61\\x62\x63'    struct.unpack('BBB', packet)

我使用 temp.log 作为脚本的参数运行脚本。

希望评论能突出我的问题。我怎样才能让变量包被解释为 '\x61\x62\x63' ??

旁白:在第一次编辑这个问题时,我假设从文件中读取行与此相同:line = "DEBUG: packetReceived '\x61\x62\x63'"这使得 packet == 'abc'

但是实际上和这个一样(使用rawstring)line = r"DEBUG: packetReceived '\x61\x62\x63'"

最佳答案

Python 不会解释您传递给正则表达式的字符串。当您定义变量 line 时,转义序列很可能在较早的时候被解释。这可以正常工作,例如:

line = r"DEBUG: packetReceived '\x61\x62\x63'"
print re.compile(r"packetReceived '(.*)'").search(line).group(1)

它打印\x61\x62\x63

关于python - 如何在没有python解释的情况下捕获二进制字符串中的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com