§

Options

§

Двоичная (основание 2)

§

Восьмеричная (основание 8)

§

Десятичная (основание 10)

§

Шестнадцатеричная (основание 16)

§

Произвольное основание

В МГТУ им. Баумана курс «Архитектура ЭВМ» строится вокруг перевода чисел между системами счисления: студенты вручную разбирают hex-дампы машинных команд ещё до знакомства с ассемблером. В лабораториях Сколково прошивки микроконтроллеров отлаживаются через JTAG-зонд, а адреса функций считываются из hex-дампа и пересчитываются в десятичный офсет для скрипта отладчика. Специалисты по реверс-инжинирингу в Лаборатории Касперского анализируют hex-дампы вредоносного ПО, сопоставляя двоичные битовые маски флагов с дизассемблерным листингом — конвертер выполняет механическую часть пересчёта, оставляя аналитику для человека.

Как работает перевод систем счисления

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

  1. Проверка алфавита ввода. Каждое основание допускает свой набор цифр. Двоичное — 0 и 1; восьмеричное — 0–7; десятичное — 0–9; шестнадцатеричное — 0–9 и A–F. Символ вне допустимого алфавита вызывает встроенное сообщение об ошибке до начала конвертации.
  2. Разбор значения. Для значений, укладывающихся в JavaScript Number (до 2^53–1), инструмент вызывает parseInt(text, base). Для больших чисел используется BigInt, что гарантирует точный результат для произвольно больших целых.
  3. Вывод в каждом целевом основании. Разобранное значение преобразуется через Number.prototype.toString(base) или BigInt.prototype.toString(base). Четыре стандартных панели (двоичная, восьмеричная, десятичная, hex) и панель с произвольным основанием обновляются одновременно.
  4. Применение форматирования. Переключатель префикса добавляет 0b, 0o или 0x к двоичному, восьмеричному и шестнадцатеричному выводу. Группировка цифр вставляет подчёркивание каждые четыре двоичные цифры и каждые две hex-цифры. Переключатель регистра задаёт прописные или строчные буквы для A–F.
  5. Синхронизация панелей в режиме реального времени. Редактирование любой панели запускает реконверсию с задержкой 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, позволяет работать быстро, не передавая данные с вашей машины.