我使用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)
之前我还没有真正使用过二进制文件所以我不知道也许我错过了一些非常简单的东西。
答案 0 :(得分:2)
您需要开始在下一个位置进行搜索,因此请搜索:
file.find(msg_start_token, start_pos + 1)
因为搜索在 start_pos
处开始,如果在该位置找到msg_start_token
,那么当然,find会返回start_pos
。
至于.index()
和.find()
之间的差异;如果找不到子字符串,则.index()
会引发ValueError
个异常,而.find()
则会返回-1
。