Python3 在 bytearray 中查找
我遇到了一个奇怪的问题,关于在字节数组中使用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
。