Из двоичной в шестнадцатеричную: четыре бита, одна цифра, без арифметики
Что делает эта конвертация
Инструмент перегруппировывает двоичную строку в блоки по четыре бита и записывает каждый блок одной цифрой основания 16. Никакой арифметики сверх таблицы из 16 строк не требуется, поэтому это единственный перевод, который действительно стоит делать глазами. Так читают битовый шаблон, который уже слишком длинный, чтобы его можно было надёжно просмотреть целиком.
Почему группы по четыре ложатся идеально
Число 16 — это 2 в четвёртой степени, поэтому четыре двоичные позиции точно соответствуют одной цифре основания 16: остатка не бывает и неполной группы тоже. Именно поэтому для байтовых данных предпочитают шестнадцатеричную, а не восьмеричную: восемь битов делятся на две группы по четыре, тогда как три на восемь не делится. Короткую ведущую группу дополняют нулями — выравнивание сохраняется, значение нет.
Таблица перевода из двоичной системы в шестнадцатеричную
Все шестнадцать возможных четырёхбитных групп и их шестнадцатеричные цифры. Выучить эту таблицу — и есть весь навык: дальше перевод из двоичной в шестнадцатеричную превращается в переписывание, а не в вычисление.
| Двоичная | Шестнадцатеричная |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 10 | 2 |
| 11 | 3 |
| 1010 | A |
| 1111 | F |
| 10000 | 10 |
| 101010 | 2A |
| 11111111 | FF |
| 100000000 | 100 |
Перевод, который делают при отладке
Когда поле протокола, регистр или битовая маска приходят в двоичном виде, а документация описывает их в шестнадцатеричном, именно этот перевод и нужен. Разбиение по четыре бита даёт и попутную проверку: если общее число битов не кратно четырём, где-то потерялся бит, и вы узнаёте об этом раньше, чем значение начнёт вводить в заблуждение.
Ведущую группу дополните, а не угадывайте
Строка из шести битов — это полторы цифры, а так не бывает. Дополните левую группу нулями до четырёх — 101011 превращается в 0010 1011 — и переводите её. Попытка угадать выравнивание и есть причина, по которой значение оказывается неверным в шестнадцать раз.
Частые вопросы
Как перевести двоичное число в шестнадцатеричное вручную?
Разбейте биты на группы по четыре, начиная справа, дополните крайнюю левую группу нулями, если она короткая, и замените каждую группу её шестнадцатеричной цифрой. 10011100 превращается в 1001 1100, то есть в 9C.
Почему группы отсчитывают справа, а не слева?
Потому что правый конец хранит младшие веса, и группировка должна следовать за весом, иначе она теряет смысл. Отсчёт слева сдвигает все цифры, когда длина не кратна четырём, и это молча меняет само число, а не просто разъезжается по разрядам.
Сколько шестнадцатеричных цифр нужно байту?
Ровно две: байт — это восемь битов, а четыре бита дают одну цифру. Эта жёсткая связь и сделала шестнадцатеричную запись основной для байтовых данных, и она же позволяет читать дамп памяти как последовательность пар.
Инструмент справляется с длинными битовыми строками?
Да. 64-битное значение превращается в 16 шестнадцатеричных цифр, и перевод получается точным, а не приблизительным: вычисления целиком идут в целочисленной арифметике, поэтому на верхнем краю диапазона, где плавающая точка начала бы округлять, ничего не теряется.
Можно вставить двоичный код с пробелами?
Да. Пробелы и подчёркивания удаляются перед переводом, поэтому код, скопированный из терминала, даташита или диффа, подходит без подготовки. Группировка в источнике на значение никак не влияет.