Як працює конвертація систем числення
Кожна позиційна система числення представляє значення як суму цифр, помножених на степені основи. Перемикання основ означає переписування того самого значення відносно іншого ряду степенів.
- Перевірка алфавіту введення. Кожна основа приймає певний набір цифр. Двійкова приймає 0 і 1; вісімкова — 0-7; десяткова — 0-9; hex — 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-виводу. Групування цифр вставляє підкреслення кожні чотири двійкові цифри та кожні дві hex-цифри. Перемикач регістру hex вибирає верхній або нижній регістр для A-F.
- Синхронізація між панелями в реальному часі. Редагування будь-якої панелі запускає відкладену на 100 мс повторну конвертацію, що оновлює інші панелі. Панель, у якій ви вводите, вважається першоджерелом при кожному натисканні клавіші.
Навіщо використовувати конвертер систем числення
- Читання дампів пам'яті. Відладчики, дизасемблери та переглядачі core-дампів показують адреси та значення регістрів у hex. Переведення їх у десяткову дозволяє порівнювати з лічильниками, розмірами та зсувами, повідомленими в інших місцях того самого трейсу.
- Робота з кольоровими кодами. CSS, дизайнерські інструменти та формати зображень записують кольори у шістнадцяткових трійках, наприклад #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
Що таке основа числення?
Основа числення, або radix, — це кількість різних цифр, що використовує позиційна система перед тим, як перейти до наступної позиції. Десяткова (основа 10) використовує 0-9; двійкова (основа 2) — лише 0 та 1; шістнадцяткова (основа 16) — 0-9 плюс A-F. Значення числа не змінюється при зміні основи — змінюється лише спосіб запису та групування цифр.
Навіщо використовують шістнадцяткову систему у програмуванні?
Одна hex-цифра відповідає рівно чотирьом двійковим бітам, тому дві hex-цифри охоплюють байт, а вісім — 32-бітне слово. Це робить hex найкомпактнішою зручною для читання формою для адрес пам'яті, вмісту регістрів, кольорових трійок та криптографічних ключів. Читати 0xFF швидше, ніж 11111111, і бітовий патерн завжди під рукою.
Чи можна конвертувати основи більше 36?
Цей інструмент зупиняється на основі 36, бо це верхня межа нативних JavaScript API parseInt та toString, що приймають 0-9, за якими йдуть A-Z як алфавіт цифр. Основи 37-62 можливі з власним алфавітом (Base58, що використовується в адресах Bitcoin, є одним прикладом), але вони відстежуються як окремий інструмент, бо кожна вища основа потребує власного канонічного порядку цифр.
Чи обробляються від'ємні числа та числа з плаваючою крапкою?
Від'ємні цілі числа виводяться з ведучим знаком мінус у кожній основі — та сама поведінка, яку постачає Number.prototype.toString. Представлення у доповняльному коді для вибраної ширини бітів (8, 16, 32, 64) є окремим виглядом, який ми плануємо додати. Конвертація основ числення з плаваючою крапкою також виходить за межі цієї версії; інструмент обробляє лише цілі значення.
Конвертація систем числення — невелике завдання, що виникає знову і знову у роботі з прошивками, безпекою та графікою. Виконання у вкладці браузера з тими самими арифметичними примітивами, що вже постачаються з Node та V8, зберігає роботу швидкою та дані на вашому пристрої.