Поиск Python3 в bytearray

У меня есть эта странная проблема с использованием 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
nl ja de

1 ответы

Вам нужно начать поиск в следующей позиции , поэтому выполните поиск по адресу:

file.find(msg_start_token, start_pos + 1)

потому что поиск начинается с в start_pos , а если в этой позиции находится msg_start_token , find вернет start_pos , конечно ,

Что касается разницы между .index() и .find() ; .index() вызывает исключение ValueError , если подстрока не найдена, а .find() возвращает -1 вместо.

2
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community