Перевод шестнадцатеричных чисел в восьмеричные

Быстрый перевод значений из шестнадцатеричной системы в восьмеричную через двоичный мост.

Шестнадцатеричные значения встречаются постоянно: в MAC-адресах, кодах цветов или записях IPv6. Восьмеричная система попадается куда реже, но обе они опираются на объединение двоичных разрядов. По этой причине перевод одной формы в другую заметно отличается от привычных расчетов с десятичными числами.

Сравнение группировки битов в hex и восьмеричной системе

Шестнадцатеричная запись собирает двоичный код в группы по четыре бита, поскольку четыре бита образуют ровно шестнадцать вариантов, от 0000 до 1111. Восьмеричный формат формирует группы по три бита, так как три бита содержат ровно восемь сочетаний, от 000 до 111.

Оба способа служат компактным представлением двоичных данных. Заменить одну шестнадцатеричную цифру на одну восьмеричную напрямую не получится: четверка и тройка не кратны друг другу. Приходится сначала развернуть код обратно в биты, а затем сгруппировать их заново.

Разница в границах байта между hex и восьмеричным представлением

Один байт состоит из восьми бит. Восемь делится на четыре без остатка, поэтому байт всегда укладывается ровно в два знака hex, от 00 до FF. Но восемь не делится без остатка на три. В итоге байт в восьмеричном виде требует три знака и задействует не весь диапазон — от 000 до 377.

В качестве примера можно взять предел одного байта. Десятичное число 255 в hex записывается как FF — аккуратные две цифры. В двоичном виде это 11111111. Если разбить эту же цепочку справа налево тройками — 011 111 111, получается восьмеричное число 377, ведь (3 × 64) + (7 × 8) + 7 = 255. Значение то же самое, но цифр три вместо двух, а в начале стоит неполная тройка.

Шаги ручного перевода hex в восьмеричные числа

  1. Замени каждую цифру hex на эквивалент из 4 двоичных бит.
  2. Объедини полученные группы по 4 бита в одну длинную двоичную строку.
  3. Справа налево разбей эту последовательность на блоки по 3 бита, дополнив крайнюю левую группу нулями при необходимости.
  4. Замени каждую группу из 3 бит на соответствующую восьмеричную цифру, от 0 до 7.
  5. Прочти полученный восьмеричный ряд слева направо для итогового результата.

Небольшие значения в четырех системах счисления

ДесятичнаяДвоичнаяHexВосьмеричная
7011177
151111F17
31111111F37
631111113F77
25511111111FF377

Вопросы о переводе hex в восьмеричные значения

Зачем переводить шестнадцатеричный код в восьмеричный?

Такая задача возникает при разборе старых систем Unix, ретро-компьютерных файлов или редких форматов данных, где исторически использовалась восьмеричная запись. В современных стандартах напрямую это требуется нечасто.

Можно ли выполнить преобразование сразу, минуя двоичный этап?

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

Влияет ли ведущий ноль в восьмеричной записи?

В некоторых языках программирования ведущий ноль обозначает восьмеричный литерал, что иногда приводит к скрытым ошибкам. При работе с данным конвертером путаницы нет, так как целевой формат задан явно.

Почему в восьмеричном формате используются цифры только до 7?

Потому что три бита способны выразить лишь восемь различных значений, от 0 до 7. Цифр 8 или 9 здесь не существует, так же как цифры 2 в двоичной системе.

Бывает ли восьмеричная запись компактнее шестнадцатеричной?

Нет. Байт без остатка делится на пары hex-символов, а восьмеричной системе нужны неполные тройки. Для работы с байтами hex практически всегда оказывается плотнее или равен по длине.

Cookie
Мы заботимся о ваших данных и хотели бы использовать файлы cookie, чтобы улучшить ваш опыт.