§

Options

§

Bináris (2-es alap)

§

Oktális (8-as alap)

§

Decimális (10-es alap)

§

Hexadecimális (16-os alap)

§

Egyéni alap

Az amerikai számítástechnikai képzések minden félévben támaszkodnak a számrendszer konverzióra. Az IEEE 754 egyszeres pontosságú lebegőpontos számok már a CS101 záróvizsgákon felbukkannak, ahol a hallgatóknak ki kell olvasniuk egy 32 bites mintát az oldalról, és fel kell bontaniuk előjelre, kitevőre és mantisszára. Az NIST IR 8366 dokumentálja a hexadecimális jelölés konvencióit a kriptográfiai kulcsanyagokhoz, amelyeket a FedRAMP-ellenőrök elvárnak a bizonyítékcsomagokban. Az Egyesült Királyságban dolgozó penetrációs tesztelők a CHECK-séma szerinti jelentéseikben ugyanezt a hexa-csoportosítási szokást követik a bitflag-ek helytelen használatának annotálásakor syscall maszkok ellen. Ez a konverter a mechanikus részt kezeli, hogy a mérnökök az értelmezésre összpontosíthassanak, ne a számtanra.

Hogyan működik az alap konverzió

Minden helyiértékes számrendszer egy értéket a számjegyek és az alap hatványainak szorzataként ábrázol. A számrendszer váltása azt jelenti, hogy ugyanazt az értéket egy másik hatványsorozat ellenében írjuk át.

  1. Bemeneti ábécé érvényesítése. Minden alap egy adott számjegykészletet fogad el. A bináris a 0-t és az 1-et fogadja el; az oktális a 0-7-et; a decimális a 0-9-et; a hexa a 0-9-et és az A-F-et. A választott ábécén kívüli karakter soron belüli hibát jelez, mielőtt bármilyen konverzió futna.
  2. Érték elemzése. Azoknál az értékeknél, amelyek beleférnek egy JavaScript Number-be (2^53-1-ig), az eszköz a parseInt(text, base)-et hívja. E határ felett BigInt-re vált, így a konverzió tetszőlegesen nagy egész számok esetén is pontos marad.
  3. Újrarajzolás minden cél alapban. A feldolgozott érték konvertálása minden kimeneti alapba a Number.prototype.toString(base) vagy BigInt.prototype.toString(base) segítségével történik. A négy szabványos panel (bináris, oktális, decimális, hexa) és az egyéni alap panel együtt frissül.
  4. Formázás alkalmazása. Egy előtag kapcsoló 0b, 0o vagy 0x előtagot ad a bináris, oktális és hexa kimenet elé. A számjegycsoportosítás aláhúzásjelet szúr be minden négy bináris számjegy és minden két hexa számjegy után. Egy hexa kis/nagybetű kapcsoló kiválasztja a nagy vagy kisbetűket az A-F számjegyekhez.
  5. Élő kereszt-panel szinkron. Bármely panel szerkesztése 100 ms késleltetésű újrakonverziót indít el, amely frissíti a többi panelt. Az éppen gépelt panel számít az igazság forrásának minden billentyűleütésnél.

Miért használjunk alap konvertert

  • Memóriakiírások olvasása. A hibakeresők, szétszedők és mag-kiírás megjelenítők a címeket és regiszterértékeket hexában mutatják. Ezek decimálissá alakítása lehetővé teszi összehasonlításukat a ugyanabban a nyomkövetésben jelentett számokkal, méretekkel és eltolásokkal.
  • Színkódokkal való munka. A CSS, a tervezőeszközök és a képformátumok a színeket hexa hármasokban adják meg, mint például #d2511a. Az egyes párok decimálissá alakítása ugyanazt a színt rgb(210, 81, 26) formává változtatja, amelyet a színválasztó vagy a hozzáférhetőség-ellenőrző vár.
  • Fájlengedélyek dekódolása. A Unix chmod értékek oktálisban vannak írva: a 755 rwxr-xr-x-et jelent, ha minden oktális számjegyet a három bináris bitjére fordítunk. A konverter ezt a leképezést egy lépésben mutatja, így ellenőrizheti a jogosultságokat anélkül, hogy egy kézikönyvoldal után kellene nyúlnia.
  • Bitflag-ek hibakeresése. A hálózati protokollok, kernel rendszerhívások és hardverregiszterek sok logikai flag-et csomagolnak egyetlen egész számba. Az egész szám bináris olvasása egy pillantásra megmutatja, mely bitek vannak beállítva, ami pontosan az, amire szüksége van, amikor azt keresi, miért nem érvényesül egy flag.

Gyakori alkalmazások

Az alap konverzió a mindennapi fejlesztői, biztonsági és hardveres munkában bukkan fel, amikor egy szám több, mint egy egyszerű számláló.

  • Beágyazott firmware: olvasson hexa dumpot egy JTAG szondából, találja meg egy függvény címét, és írjon egy töréspont parancsot a decimális eltolással, amelyet a hibakereső parancsfájlja elfogad.
  • Hálózati biztonság: elemezzen egy 32 bites hálózati maszkot pontozott-decimális formában vissza binárisba a prefix hosszának megszámolásához, majd írja meg a CIDR formát egy ACL szabályhoz.
  • CTF rejtvények és kriptó kihívások: váltson hexa, decimális és bináris között, miközben egy kiszivárgott kulcsdarabot összehasonlít egy jelölt egyszerű szöveggel XOR alatt.

Egy kidolgozott példa

Írja be a 255-öt a decimális panelbe. A hexa panel frissül FF-re (vagy 0xFF-re a bekapcsolt előtag kapcsolóval), a bináris panel 11111111-re (csoportosítva 1111_1111), az oktális panel pedig 377-re. Váltsa az egyéni panel alapját 36-ra, és ugyanaz az érték 73-ként jelenik meg. Írjon be egy sokkal nagyobb értéket, például 123456789012345678901234567890-at a decimális panelbe; a hexa panel a BigInt utat használja, és 18EE90FF6C373E0EE4E3F0AD2-t jelenít meg.

FAQ

Mi az a számrendszer alap?

A számrendszer alap, vagy radix, azt jelenti, hogy hány különböző számjegyet használ egy helyiértékes rendszer, mielőtt a következő helyiértékre lép. A decimális (10-es alap) a 0-9-et használja; a bináris (2-es alap) csak a 0-t és az 1-et; a hexadecimális (16-os alap) a 0-9-et plusz A-F-et. A szám értéke nem változik az alapváltáskor — csak a számjegyek írásának és csoportosításának módja.

Miért használjunk hexadecimális értékeket programozásban?

Egy hexa számjegy pontosan négy bináris bitnek felel meg, így két hexa számjegy lefed egy bájtot, nyolc hexa számjegy pedig egy 32 bites szót. Ez teszi a hexát a legtömörebb emberi olvasásra alkalmas formává memóriacímekhez, regiszter tartalmakhoz, szín hármasokhoz és kriptográfiai kulcsokhoz. A 0xFF olvasása gyorsabb, mint a 11111111-é, és a bitminta ott van, ha szüksége van rá.

Tudok 36-os alap felett konvertálni?

Ez az eszköz a 36-os alapnál megáll, mert ez a felső határa a natív JavaScript parseInt és toString API-knak, amelyek a 0-9-et követően A-Z-ig fogadják el a számjegy ábécét. A 37-62-es alapok lehetségesek egy egyéni ábécével (a Bitcoin címekben használt Base58 egy példa), de ezek külön eszközként vannak nyomon követve, mert minden magasabb alapnak saját kanonikus számjegy sorrendre van szüksége.

Kezeli ez a negatív számokat és lebegőpontos értékeket?

A negatív egészek minden alapban vezető mínuszjellel jelennek meg, ugyanúgy, ahogy a Number.prototype.toString viselkedik. A kettes komplemens ábrázolás egy választott bitszélességen (8, 16, 32, 64) keresztül egy külön nézet, amelyet tervezünk hozzáadni. A lebegőpontos alap konverzió szintén nem része ennek a verziónak; az eszköz csak egész számokat kezel.

Az alap konverzió egy apró feladat, amely újra és újra felbukkan a firmware, a biztonság és a grafikai munka során. Ha egy böngészőlapon végzi, ugyanazokkal az aritmetikai primitívekkel, amelyeket a Node és a V8 már tartalmaz, a munka gyors marad, az adatok pedig az Ön gépén maradnak.