Как пользоваться
- Выберите «Кодировать», чтобы перевести текст в восьмеричный код, или «Декодировать», чтобы получить текст из восьмеричных значений.
- Введите или вставьте входные данные либо откройте файл, чтобы преобразовать его байты.
- Выберите разделитель для результата: «Пробел», «Нет», «Запятая» или «Перевод строки».
- Скопируйте результат или скачайте его в виде файла.
Что такое восьмеричная система?
В восьмеричной системе (Base8) числа записываются цифрами от 0 до 7. Каждая восьмеричная цифра соответствует ровно трём битам, поэтому эта система была популярна на ранних компьютерах с длиной машинного слова, кратной трём, например на 12-битном PDP-8 и 36-битном PDP-10. Сегодня она сохранилась в основном в escape-последовательностях и правах доступа к файлам в Unix.
Байт хранит значение от 0 до 255, что в восьмеричной записи соответствует диапазону от 0 до 377. Этот конвертер записывает каждый байт входных данных ровно тремя восьмеричными цифрами с ведущими нулями, поэтому все группы имеют одинаковую ширину и их можно даже писать слитно, без разделителя. Сначала текст превращается в байты в выбранной кодировке: один байт на символ для обычного ASCII и от двух до четырёх байтов на символ для других письменностей в UTF-8.
Восьмеричные escape-последовательности
В C, C++, Python, Perl и команде printf в командной оболочке байт можно записать как обратную косую черту, за которой следуют до трёх восьмеричных цифр: \101 — это буква A, а \012 — перевод строки.
Этот инструмент выводит только цифры без обратных косых черт. Чтобы получить экранированную строку, возьмите результат с разделителем-пробелом, замените каждый пробел обратной косой чертой и добавьте ещё одну перед первой группой. Чтобы декодировать escape-последовательности, сделайте обратное: замените обратные косые черты пробелами, потому что декодер принимает только цифры и разделители.
Права доступа к файлам, например 755, тоже записываются в восьмеричной системе, но это числа, а не текст. Чтобы перевести такое число в двоичную или десятичную систему, воспользуйтесь конвертером систем счисления.
Восьмеричная запись в программах
# Python
' '.join(f'{b:03o}' for b in 'Hi'.encode()) # '110 151'
bytes(int(o, 8) for o in '110 151'.split()).decode() # 'Hi'
# Shell
printf '\110\151\n' # выводит Hi
printf 'Hi' | od -An -to1 # 110 151
Спецификация
| Алфавит | 0-7 |
|---|---|
| Размер результата | 3 цифры на байт (300%) |
| Дополнение | Нет |
| Стандарт | Позиционная восьмеричная запись |
| Учёт регистра | Нет |
Примеры
| Исходные данные (UTF-8) | Результат |
|---|---|
Hello, World! | 110 145 154 154 157 054 040 127 157 162 154 144 041 |
Base64.is | 102 141 163 145 066 064 056 151 163 |
你好 | 344 275 240 345 245 275 |
Часто задаваемые вопросы
Почему у каждого байта три восьмеричные цифры?
Наибольшее значение байта, 255, в восьмеричной системе записывается как 377, поэтому трёх цифр всегда достаточно. Дополнение меньших значений ведущими нулями делает все группы одинаковой ширины, и благодаря этому строку без разделителей можно снова разбить на байты.
Как декодировать восьмеричный код без пробелов?
Вставьте цифры одной сплошной строкой. Декодер разбивает её на группы по три цифры, поэтому длина должна быть кратна 3. Если в некоторых значениях меньше трёх цифр, разделите их пробелами, запятыми или переводами строк.
Почему значение вроде 400 отклоняется?
Восьмеричное 400 равно 256, а это число не помещается в байт. Допустимые значения байтов лежат в диапазоне от 0 до 377, и декодер сообщает позицию любой группы за его пределами. Цифры 8 и 9 вообще не являются восьмеричными.
Можно ли получить восьмеричные значения для другой кодировки?
Да. Выберите её в меню «Кодировка текста», например Windows-1252 или ISO-8859-1, чтобы получить один байт на каждый западноевропейский символ, или GBK и Shift_JIS для китайского и японского текста.