Двійкова, шістнадцяткова системи та одиниці даних — пояснення
Практичний глосарій двійкової, шістнадцяткової систем та конвенцій одиниць даних, які використовуються в програмуванні, мережах та судово-комп'ютерній експертизі.
Кожен байт, який ви розглядаєте в hex-редакторі, кожну маску підмережі, яку ви обчислюєте, кожен розмір файлу, який повідомляє інструмент, залежить від невеликого набору систем числення та конвенцій одиниць. Помилитися з цим — значить неправильно оцінити розмір буфера, невірно прочитати дамп пам'яті або посперечатися з колегою про те, чи 1 KB це 1000 або 1024 байти.
Двійкова система: основа, якою насправді розмовляє кожен комп'ютер
Двійкова система — це основа 2, тільки 0 та 1. Одна двійкова цифра — це біт. Об'єднайте 8 бітів разом, і ви отримаєте байт, який може представляти 256 різних значень (від 0 до 255 без знаку, або від -128 до 127 з двійковим доповненням).
Коли ви бачите 01001000, це 72 у десятковій системі, що випадково є ASCII-кодом символу 'H'. Конвертування від руки — це просто сумування степенів 2 від крайнього правого біта: 2^6 + 2^3 = 64 + 8 = 72. Інструменти як python3 -c "print(bin(72))" або xxd на файлі зроблять це миттєво, але розуміння математики має значення, коли ви робите зворотну інженерію бітової маски або опрацьовуєте значення прапорів у TCP-заголовку.
Шістнадцяткова система: скорочення для двійкової
Hex — це основа 16, використовує 0-9 та A-F. Вона існує, тому що двійкова система нечитабельна в масштабі, а десяткова не відображається чисто на межах байтів. Одна шістнадцяткова цифра представляє рівно 4 біти, тому дві шістнадцяткові цифри представляють один повний байт — 0x00 до 0xFF охоплює всі 256 значень байтів без втрати місця.
Отож, hex-дампи є стандартом в інструментах як xxd, hexdump -C або в представленні пам'яті дизасемблера. Коли ви бачите 0x4D 0x5A на початку файлу, це заголовок MZ, який ідентифікує Windows PE-виконавець. Адреси пам'яті, коди кольорів (#FF5733), MAC-адреси та IPv6-адреси традиційно записуються в hex, тому що це так чисто відображається на базовій структурі байтів та напівбайтів.
Конвертування hex у десятковий: 0x4D = (4 × 16) + 13 = 77. У Python int('4D', 16) дає вам результат без ручних обчислень, а hex(77) працює в зворотному напрямку.
Де двійкова, десяткова та шістнадцяткова системи насправді зустрічаються на практиці
IP-адреси — хороший приклад зіткнення всіх трьох. IP-адреса версії 4 як 192.168.1.1 насправді чотири байти: 11000000.10101000.00000001.00000001 у двійковій системі, або C0.A8.01.01 у hex. Математика підмережування — з'ясування, чи знаходяться дві адреси в одній мережі — це принципово двійкові AND-операції проти маски підмережі, хоча ми записуємо все в пунктирній десяткові для зручності.
У судово-комп'ютерній експертизі та аналізі шкідливих програм ви постійно перекладаєте між цими представленнями. Дизасемблер показує opcodes у hex, але CPU виконує сиру двійкову, а значення регістрів часто інтерпретуються як десяткові зміщення або ASCII-рядки залежно від контексту. Знання того, що 0x41 — це одночасно число 65 та ASCII-символ 'A' — це саме той рід розпізнавання закономірностей, який помітно прискорює ручний аналіз.
Одиниці даних: проблема 1000 проти 1024
Отут люди насправді потрапляють у біду. Виробники сховища, файлові системи та операційні системи не завжди дозволяють договоритися про те, що є
Написано з допомогою штучного інтелекту, перевірено та опубліковано Мішалем Пільчем (CISSP), Korra Studio.
Це одна замітка з бази знань Korra Studio — платформа поєднує кожну тему з 1-на-1 менторингом.
Початок безплатноarrow_forward