То, как вы делаете это, резервируя один из битов, означающих «Я не закончил со значением». Обычно это самый важный бит.
Когда вы читаете байт, вы обрабатываете младшие 7 бит. Если старший бит равен 1, то вы знаете, что нужно прочитать еще один байт, и повторяете процесс, добавляя следующие 7 бит к текущим 7 битам.
В формате MIDI эта точная кодировка используется для представления длины событий MIDI следующим образом:
- Ожидаемое значение = 0
- байт = ReadFromFile
- ExpectedValue = ExpectedValue + (byte AND 0x7f)
- если байт> 127, то
- Ожидаемое значение = Ожидаемое значение SHL 7
- Перейти к 2
- Готово
Например, значение 0x80 будет представлено с помощью байтов 0x81 0x00. Вы можете попробовать запустить алгоритм на этих двух байтах, и вы увидите, что получите правильное значение.
UTF-8 работает аналогично, но использует немного более сложную схему, чтобы сообщить вам, сколько байтов вы должны ожидать. Это позволяет исправить ошибки, поскольку вы можете легко определить, соответствуют ли получаемые вами байты заявленной длине. Википедия довольно хорошо описывает их структуру .