Python3在bytearray中搜索

我使用find()/ index()(不知道它们之间是否有任何区别)与bytesarray有这个奇怪的问题.

我正在使用二进制文件,我已将其加载为bytesarray,现在我需要找到指示消息开头和消息结束的令牌.
找到消息的开头(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)  

我以前没有真正使用过二进制文件所以我不知道也许我错过了一些非常简单的东西.

最佳答案 您需要在下一个位置开始搜索,因此请搜索:

file.find(msg_start_token, start_pos + 1)

因为搜索从start_pos开始,如果在该位置找到msg_start_token,find当然会返回start_pos.

至于.index()和.find()之间的区别;如果未找到子字符串,则.index()会引发ValueError异常,而.find()则返回-1.

点赞