Как работает перевод систем счисления
В каждой позиционной системе счисления значение представляется как сумма цифр, умноженных на степени основания. Смена основания означает перезапись того же значения через другой степенной ряд.
- Проверка алфавита ввода. Каждое основание допускает свой набор цифр. Двоичное — 0 и 1; восьмеричное — 0–7; десятичное — 0–9; шестнадцатеричное — 0–9 и A–F. Символ вне допустимого алфавита вызывает встроенное сообщение об ошибке до начала конвертации.
- Разбор значения. Для значений, укладывающихся в JavaScript Number (до 2^53–1), инструмент вызывает
parseInt(text, base). Для больших чисел используетсяBigInt, что гарантирует точный результат для произвольно больших целых. - Вывод в каждом целевом основании. Разобранное значение преобразуется через
Number.prototype.toString(base)илиBigInt.prototype.toString(base). Четыре стандартных панели (двоичная, восьмеричная, десятичная, hex) и панель с произвольным основанием обновляются одновременно. - Применение форматирования. Переключатель префикса добавляет 0b, 0o или 0x к двоичному, восьмеричному и шестнадцатеричному выводу. Группировка цифр вставляет подчёркивание каждые четыре двоичные цифры и каждые две hex-цифры. Переключатель регистра задаёт прописные или строчные буквы для A–F.
- Синхронизация панелей в режиме реального времени. Редактирование любой панели запускает реконверсию с задержкой 100 мс, обновляющую остальные панели. Панель, в которую вы вводите данные, считается источником истины на каждое нажатие клавиши.
Зачем нужен конвертер систем счисления
- Чтение дампов памяти. Отладчики, дизассемблеры и просмотрщики core-дампов показывают адреса и значения регистров в hex. Перевод в десятичную систему позволяет сопоставить их со счётчиками, размерами и смещениями из других частей трассировки.
- Работа с цветовыми кодами. CSS, дизайн-инструменты и форматы изображений задают цвета hex-тройками вида #d2511a. Перевод каждой пары в десятичное число даёт форму rgb(210, 81, 26), которую ожидает ваш выбор цвета или проверка доступности.
- Расшифровка прав доступа. Права доступа Unix chmod записываются в восьмеричной системе: 755 означает rwxr-xr-x, если перевести каждую восьмеричную цифру в три двоичных бита. Конвертер показывает это соответствие за один шаг без обращения к man-странице.
- Отладка битовых флагов. Сетевые протоколы, системные вызовы ядра и аппаратные регистры упаковывают множество булевых флагов в одно целое число. Просмотр числа в двоичном виде мгновенно показывает, какие биты установлены, — именно это нужно, когда флаг не срабатывает.
Типичные области применения
Перевод систем счисления встречается в повседневной работе разработчика, специалиста по безопасности и аппаратного инженера всякий раз, когда число — это не просто количество.
- Встраиваемые прошивки: считайте hex-дамп с JTAG-зонда, найдите адрес функции и запишите команду точки останова, используя десятичный офсет, который принимает скрипт отладчика.
- Сетевая безопасность: разберите 32-битную маску подсети в точечно-десятичном формате обратно в двоичный, чтобы подсчитать длину префикса, и запишите CIDR-форму для правила ACL.
- CTF-задачи и крипто-соревнования: переключайтесь между hex, десятичной и двоичной, сравнивая фрагмент утёкшего ключа с кандидатом на открытый текст через XOR.
Разобранный пример
Введите 255 в десятичную панель. Hex-панель обновится до FF (или 0xFF с включённым префиксом), двоичная — до 11111111 (сгруппировано как 1111_1111), восьмеричная — до 377. Переключите основание панели произвольного ввода на 36 — то же значение отобразится как 73. Введите очень большое значение, например 123456789012345678901234567890, в десятичную панель — hex-панель задействует путь BigInt и выведет 18EE90FF6C373E0EE4E3F0AD2.
FAQ
Что такое система счисления?
Система счисления, или основание, определяет, сколько различных цифр использует позиционная система до переноса в следующий разряд. Десятичная (основание 10) использует 0–9; двоичная (основание 2) — только 0 и 1; шестнадцатеричная (основание 16) — 0–9 и A–F. Значение числа не меняется при смене основания — меняется лишь способ записи и группировки цифр.
Почему в программировании используют шестнадцатеричную систему?
Одна hex-цифра соответствует ровно четырём двоичным битам, поэтому две hex-цифры покрывают байт, а восемь — 32-битное слово. Это делает hex наиболее компактным человекочитаемым представлением адресов памяти, содержимого регистров, цветовых троек и криптографических ключей. Читать 0xFF быстрее, чем 11111111, а битовый образец виден сразу, если он нужен.
Можно ли конвертировать основания выше 36?
Инструмент ограничен основанием 36, поскольку таков верхний предел нативных JavaScript-функций parseInt и toString, принимающих алфавит 0–9 и A–Z. Основания 37–62 возможны с пользовательским алфавитом (Base58, применяемый в Bitcoin-адресах, — один из примеров), но они требуют отдельного инструмента, так как каждое высокое основание имеет своё каноническое упорядочение цифр.
Поддерживаются ли отрицательные числа и дроби?
Отрицательные целые числа выводятся с ведущим знаком минус во всех системах счисления — так же работает Number.prototype.toString. Представление в дополнительном коде для заданной битовой ширины (8, 16, 32, 64) мы планируем добавить отдельным видом. Перевод чисел с плавающей точкой также выходит за рамки данной версии — инструмент работает только с целыми числами.
Перевод систем счисления — небольшая задача, которая снова и снова возникает в разработке прошивок, безопасности и графике. Решение её прямо во вкладке браузера на тех же арифметических примитивах, что уже есть в Node и V8, позволяет работать быстро, не передавая данные с вашей машины.