我在使用find()/index()和bytesrray时遇到了这个奇怪的问题(不知道它们之间是否有任何区别)。
我正在处理二进制文件,我已经将其加载为字节码,现在我需要找到指示消息开始和消息结束的标记。找到消息的开头(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
。
至于CCD_ 4和CCD_;如果未找到子字符串,.index()
将引发ValueError
异常,而.find()
将返回-1
。