5

bytesarray で find()/index() (それらの間に違いがあるかどうかはわかりません) を使用すると、この奇妙な問題が発生します。

私はバイナリファイルで作業しています.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)  

私は以前にバイナリファイルを実際に扱ったことがないので、実際には本当に単純なものが欠けているかもしれません。

4

1 に答える 1

4

次の位置から検索を開始する必要があるため、次の場所で検索します。

file.find(msg_start_token, start_pos + 1)

検索は から開始される ため、がその位置で見つかったstart_pos場合、もちろん find が返されます。msg_start_tokenstart_pos

.index()との違いについては.find(); 部分文字列が見つからない場合は例外を発生さ.index()せ、代わりに while を返します。ValueError.find()-1

于 2013-02-07T13:11:13.473 に答える