CodeKitHub
Prečo váš prevod binárneho kódu na text vypisuje nesprávne znaky

Prečo váš prevod binárneho kódu na text vypisuje nesprávne znaky

Publikované 24. 7. 2026

Reťazec jednotiek a núl vyzerá jednoznačne — je to binárny kód, netreba nič interpretovať. V praxi však prevod binárneho kódu na text zlyháva presne rovnakým spôsobom ako prevod z hexadecimálneho kódu, a to z rovnakého dôvodu: postupnosť bitov nie je textom, kým neurobíte niekoľko predpokladov o tom, ako ju zoskupiť a interpretovať — a ak sa pomýlite čo i len v jednom z nich, výsledok bude nesprávny konkrétnym, diagnostikovateľným spôsobom.

Príčina 1: nesprávne zoskupenie bitov (7-bitové vs. 8-bitové)

Štandardné ASCII potrebuje na znak len 7 bitov; väčšina nástrojov na prevod binárneho kódu na text však predvolene používa 8-bitové bajty, pretože presne tak sa text skutočne ukladá v reálnych systémoch. Ak bol binárny reťazec vytvorený s predpokladom 7-bitového zoskupenia (niektoré učebnicové príklady a staršie systémy to tak stále robia) a vy ho dekódujete ako 8-bitové bajty, každý jednotlivý znak vyjde posunutý — hranica zoskupenia je nesprávna už od prvého bitu, takže sa poškodenie prejaví rovnomerne v celom výstupe, nie až od nejakého bodu ďalej.

Poznávacie znamenie: ak je vo výstupe nesprávny doslova každý znak, nielen niektoré, skontrolujte najprv predpoklad o zoskupení bitov.

Príčina 2: pridaný alebo chýbajúci bit posunie všetko za ním

Toto je binárny ekvivalent nepárnej hex číslice — jedna zablúdená 0 alebo 1 (znak navyše z kopírovania a vkladania, vynechaná číslica, medzera, ktorá sa omylom spracovala ako dáta) posunie hranicu bajtu pre každú ďalšiu skupinu za týmto bodom. Na rozdiel od príčiny 1 to vytvorí text, ktorý je správny do určitého bodu a potom sa pokazí — silný signál, že problém je v celkovom počte bitov niekde v reťazci, nie v samotnej schéme kódovania.

Najprv spočítajte celkový počet bitov: dĺžka reťazca by mala byť presným násobkom 8 (alebo 7, ak ste si overili, že sa používa toto zoskupenie). Ak nie je, chýbajúci alebo pridaný bit je chyba, nie dekodér.

Príčina 3: kódovanie znakov, presne ako pri hex kóde

Keď sú bity správne zoskupené do bajtov, stále musíte rozhodnúť, čo tieto hodnoty bajtov znamenajú ako znaky — UTF-8, ASCII, Latin-1. Je to totožné s prípadom hex-na-text: viacbajtové znaky UTF-8 (znaky s diakritikou, symboly, neslovanské písma) dekódované bajt po bajte, akoby bol každý bajt samostatným znakom, vytvoria dva alebo tri poškodené symboly namiesto jedného správneho. Ak je zoskupenie bitov overené ako správne (príčiny 1 a 2 vylúčené) a výstup je stále nesprávny konkrétne pri neanglických znakoch, takmer vždy ide o túto zostávajúcu príčinu.

Príčina 4: poradie bajtov (endianness), pri binárnom zápise čísel namiesto textu

Ak binárny reťazec zakódováva číselnú hodnotu namiesto textových dát — dĺžkový prefix, kontrolný súčet, ID vložené vedľa textu — záleží na poradí bitov/bajtov a neexistuje univerzálny predvolený spôsob. 00000001 ako samostatný bajt je jednoznačný, ale viacbajtové číselné hodnoty môžu byť uložené s najvýznamnejším bajtom na začiatku alebo s najmenej významným bajtom na začiatku, podľa systému, ktorý ich vytvoril — a čítanie so zlým predpokladom potichu vyprodukuje iné, na pohľad vierohodné, ale nesprávne číslo namiesto zjavnej chyby.

Diagnostika v poradí

  1. Skontrolujte, či je celkový počet bitov presným násobkom predpokladaného zoskupenia (zvyčajne 8) — nesprávny počet znamená príčinu 2, opravte vstup.
  2. Ak je od začiatku rovnomerne nesprávny každý znak, podozrievajte samotnú veľkosť zoskupenia (príčina 1) skôr, než sa pustíte do kódovania.
  3. Ak je výstup najprv čistý a potom sa v určitom bode pokazí, ukazuje to na zablúdený alebo chýbajúci bit v danom mieste (príčina 2), nie na problém s kódovaním.
  4. Ak zoskupenie aj počet bitov sedia a nesprávne vyzerajú len neanglické znaky, ide o kódovanie znakov (príčina 3).
  5. Ak dáta reprezentujú číslo namiesto textu a hodnota vyzerá vierohodne, ale je nesprávna, skontrolujte poradie bajtov (príčina 4) skôr, než začnete podozrievať samotnú logiku prevodu.

Rovnako ako pri hex kóde, samotný krok prevodu je triviálny — skutočná chyba takmer vždy spočíva v jednom z týchto štyroch predpokladov, nie v kóde, ktorý prevod vykonáva.

← Späť na blog