Python3 在 bytearray 中查找

6 投票
1 回答
14453 浏览
提问于 2025-04-17 15:06

我遇到了一个奇怪的问题,关于在字节数组中使用find()和index()这两个方法(我不知道它们之间有没有什么区别)。

我正在处理一个二进制文件,把它加载成字节数组,现在我需要找到一些标记,这些标记表示消息的开始和结束。 找到消息开始的位置(0x03 0x02)一切都很顺利,但当我搜索结束的位置(0x00)时,总是回到我开始搜索的那个位置。

    msg_start_token = bytearray((int(0x03), int(0x02)))
    msg_end_token = bytes(int(0x00))

    def get_message(file,start_pos):
        msg_start = file.find(msg_start_token,start_pos) + 2
        print(hex(msg_start))
        msg_end = file.find(msg_end_token,msg_start)
        print(hex(msg_end))
        msg = file[msg_start:msg_end]
        print(msg)
        return (msg, msg_end)  

我之前其实没有处理过二进制文件,所以可能我错过了一些很简单的东西。

1 个回答

5

你需要从下一个位置开始搜索,所以要在这里搜索:

file.find(msg_start_token, start_pos + 1)

因为搜索是从start_pos开始的,如果在这个位置找到了msg_start_token,那么自然会返回start_pos

至于.index().find()的区别;如果找不到子字符串,.index()会抛出一个ValueError错误,而.find()则会返回-1

撰写回答