Celé číslo zostane rovnaké
Desiatkové číslo 65, dvojkové 1000001 a šestnástkové 41 sú tri zápisy toho istého nezáporného celého čísla. Základ číselnej sústavy mení zápis, nie samotnú hodnotu. Zadajte 65 do vloženého prevodníka z desiatkovej do dvojkovej sústavy a potom skúste prevod do šestnástkovej sústavy. Nula na začiatku môže doplniť zápis na celý osembitový bajt, teda 01000001, no číselnú hodnotu nemení. Opačný prevodník vie výsledok overiť. Takýto postup sa hodí, ak zdroj jednoznačne predstavuje celé číslo, napríklad počet alebo bitovú masku.
Text najprv potrebuje kódovanie znakov
Písmeno A je textový znak. UTF-8 ho predstavuje s jedným bajtom 0x41, ktorého bitový vzor je 01000001. To sa zhoduje s príkladom celého čísla vyššie, pretože znaky ASCII zaberajú tieto bajtové hodnoty v UTF-8. Ale reťazec „65“ obsahuje dva znaky, 6 a 5; jeho UTF-8 bajty sú 0x36 a 0x35. Spustenie prevodníka čísel na 65 a prevodníka textu na bajty na „65“ preto odpovedá na rôzne otázky. Skontrolujte, či zdroj znamená číselnú hodnotu alebo doslovné písané znaky.
- Celé číslo: 65₁₀ = 41₁₆ = 1000001₂
- Text „A“ → bajt UTF-8: 41₁₆
- Text „65“ → bajty UTF-8: 36 35₁₆
Text s diakritikou odhaľuje rozdiel
Znak é je v UTF-8 reprezentovaný dvoma bajtmi, C3 A9 v šestnástkovej sústave. Jeho kódový bod Unicode je U+00E9 a môže byť vyjadrený aj písmenom e, za ktorým nasleduje kombinačný prízvuk v inej normalizovanej forme. Nástroj na prevod textu na binárne môže zobraziť dve osembitové skupiny pre zložený podobu v UTF-8, a nie jednu osembitovú skupinu pre jedno viditeľné písmeno. Zaobchádzanie s kódovým bodom znaku, ako keby to bol jeden bajt, by stratilo informácie alebo vytvorilo nesprávny výstup. Pri riešení problémov s textovým protokolom použite bajtové zobrazenie UTF-8, nie nástroj pre desiatkové až šestnástkové celé číslo.
Sledujte hranice a oddeľovače
Binárny reťazec 0100000101000010 možno čítať ako dva bajty, 01000001 a 01000010, čo znamená AB pod UTF-8. Bez známeho pravidla kódovania a zoskupovania znakov je holý bitový reťazec nejednoznačný. Desatinná 4142 nie je rovnaká ako hexadecimálna 4142 a ani jedna automaticky neznamená dva textové bajty. Predpony ako 0x pre hexadecimálne a explicitné medzery medzi bajtmi uľahčujú čítanie záznamu. Pred dekódovaním vložených údajov zachovajte ich pôvodné oddeľovače a zistite, či sú úvodné nuly významné v okolitom formáte.
Vyberte opakovateľnú kontrolu
Pri numerických prevodoch zaznamenajte pôvodné celé číslo a jeho základ, skonvertujte ho a potom ho obráťte pomocou zodpovedajúceho numerického nástroja. V prípade textu zaznamenajte znaky, ich normalizáciu, ak je to relevantné, a ich bajty UTF-8, potom bajty dekódujte pomocou nástroja zodpovedajúceho textu. Vyskúšajte A, 65 a é ako tri samostatné testovacie vstupy. Ak skopírovaný výstup vyzerá prekvapivo dlho, spočítajte bajty a skontrolujte, či vstup obsahuje medzery, nový riadok alebo iné znaky ako ASCII. Tieto dva pracovné toky sa môžu stretnúť v bajtovej hodnote, ale ich interpretácia vychádza zo zdrojovej zmluvy.
Keď výpis protokolu obsahuje zápis 41, doplňte k nemu označenie sústavy a otázku, či ide o číslo alebo bajt textu. Hexadecimálne 41 predstavuje desiatkové 65; textové znaky „4“ a „1“ majú v UTF-8 dva samostatné bajty. Ak chýba tento kontext, správny prevodník sa nedá zvoliť len podľa vzhľadu vstupu. Krátky referenčný príklad s písmenom A pomáha odhaliť zámeny.