Терминатор (QR)
Терминатор — последовательность до четырёх нулевых бит (0000) после закодированных данных QR, отмечающая конец потока; за ней идёт выравнивание до байта и заполняющие байты.
Что такое терминатор
Терминатор — короткая метка конца данных в потоке битов QR-кода. Это последовательность нулей, до четырёх бит 0000, которую кодер добавляет сразу за закодированным сообщением. Смысл простой: сказать декодеру, где заканчиваются осмысленные данные и дальше начинается служебная набивка. Без такого признака сканер не отличил бы полезные биты от заполнителей.
Как работает
После того как все режимы кодирования отработали и данные уложены в поток, кодер дописывает терминатор — обычно четыре нулевых бита. Есть нюанс: если сообщение почти заполнило ёмкость версии и до конца области данных остаётся меньше четырёх бит, терминатор укорачивается ровно до оставшегося места или опускается вовсе. То есть 0000 — это максимум, а не жёсткая длина. Терминатор не образует отдельный режим и не кодирует данные, он лишь закрывает поток.
Что идёт после терминатора
Дальше поток выравнивается: если после терминатора длина не кратна восьми, добавляются нули до границы целого байта. Затем, если до конца области данных ещё есть место, идут заполняющие байты 0xEC и 0x11. И только за всей этой областью данных считаются проверочные байты коррекции. При чтении декодер, встретив терминатор, прекращает разбор данных — остальное для него шум. Собрать код и увидеть структуру потока можно в генераторе QR.
Частые вопросы
Что такое терминатор в QR-коде?
Метка конца данных — последовательность нулей длиной до четырёх бит (0000), которую кодер ставит сразу за закодированным сообщением. Она сообщает декодеру, где заканчиваются осмысленные данные и дальше идёт выравнивание и заполнители. Собственного содержания терминатор не несёт.
Всегда ли терминатор равен четырём битам?
Нет, четыре бита — это максимум. Если сообщение почти заполнило ёмкость версии и до конца области данных остаётся меньше четырёх свободных бит, терминатор укорачивается до оставшегося места или вовсе опускается. В обычном случае, когда место есть, он равен полным 0000.
Чем терминатор отличается от заполняющих байтов?
Терминатор — короткая метка конца данных (до 4 нулей) сразу за сообщением. Заполняющие байты (0xEC и 0x11) идут позже, после выравнивания до байта, и добивают область данных до ёмкости версии. Терминатор один и маленький, а заполнителей может быть много подряд.
Что происходит после терминатора?
Поток дополняется нулями до границы целого байта, затем при наличии места — чередующимися заполняющими байтами 0xEC и 0x11. Всё это образует область данных, за которой уже считаются проверочные байты Рид-Соломона. Декодер, встретив терминатор, дальше данные не разбирает.