CodeKitHub
Proč váš převod binárního kódu na text dává špatné znaky

Proč váš převod binárního kódu na text dává špatné znaky

Publikováno 24. 7. 2026

Řetězec jedniček a nul vypadá jednoznačně — je to binární kód, není co interpretovat. V praxi převod binárního kódu na text selhává úplně stejnou rodinou způsobů jako převod hex na text, a to ze stejného základního důvodu: posloupnost bitů není text, dokud neuděláte několik předpokladů o tom, jak ji seskupit a interpretovat — a když je kterýkoli z nich špatně, výstup je špatně specifickým, diagnostikovatelným způsobem.

Příčina 1: špatné seskupení bitů (7 bitů vs. 8 bitů)

Standardní ASCII potřebuje jen 7 bitů na znak; většina nástrojů pro převod binárního kódu na text má jako výchozí 8bitové bajty, protože tak se text na reálných systémech skutečně ukládá. Pokud byl binární řetězec vytvořen s předpokladem 7bitových skupin (některé učebnicové příklady a starší systémy to pořád dělají) a vy ho dekódujete jako 8bitové bajty, vyjde každý jednotlivý znak posunutý — hranice seskupení je špatně už od úplně prvního bitu, takže poškození je rovnoměrné po celém výstupu, místo aby začínalo čistě a rozpadalo se v průběhu.

Poznávací znak: pokud je špatně doslova každý znak výstupu, ne jen některé, zkontrolujte předpoklad seskupení bitů dřív než cokoli jiného.

Příčina 2: bit navíc nebo chybějící bit posune všechno za sebou

Tohle je binární obdoba liché hexové číslice — jediná zatoulaná 0 nebo 1 (znak navíc z copy-paste, ztracená číslice, mezera, která se zpracovala jako data) posune hranici bajtu pro každou skupinu za tím místem. Na rozdíl od příčiny 1 tohle vytváří text, který je do určitého bodu správně a pak rozsypaný — silný signál, že je někde v řetězci špatně samotný počet bitů, ne že by bylo špatně kódovací schéma jako celek.

Nejdřív spočítejte celkový počet bitů: délka řetězce by měla být čistým násobkem 8 (nebo 7, pokud jste si potvrdili, že se používá tohle seskupení). Pokud není, je chybou ten bit navíc nebo chybějící bit, ne dekodér.

Příčina 3: kódování znaků, přesně jako u hexu

Jakmile jsou bity správně seskupené do bajtů, pořád musíte rozhodnout, co ty hodnoty bajtů znamenají jako znaky — UTF-8, ASCII, Latin-1. Je to identické s případem hex na text: vícebajtové znaky UTF-8 (písmena s diakritikou, symboly, nelatinková písma) dekódované bajt po bajtu, jako by každý bajt byl samostatný znak, vytvoří dva až tři rozsypané symboly místo jednoho správného. Pokud je seskupení bitů potvrzené jako správné (příčiny 1 a 2 vyloučeny) a výstup je pořád špatně konkrétně kolem ne-ASCII znaků, je to téměř vždy tahle zbývající příčina.

Příčina 4: endianita — u binárního kódu představujícího čísla, ne text

Pokud binární řetězec kóduje číselnou hodnotu, a ne znaková data — prefix délky, kontrolní součet, ID vložené vedle textu — záleží na pořadí bitů/bajtů a žádný univerzální výchozí stav neexistuje. 00000001 jako samostatný bajt je jednoznačný, ale vícebajtové číselné hodnoty mohou být uložené od nejvýznamnějšího, nebo od nejméně významného bajtu podle systému, který je vytvořil, a čtení se špatným předpokladem potichu vyprodukuje jiné, věrohodně vypadající špatné číslo místo zjevné chyby.

Diagnostika popořadě

  1. Zkontrolujte, že celkový počet bitů je čistým násobkem předpokládaného seskupení (obvykle 8) — nesedící počet znamená příčinu 2, opravte vstup.
  2. Pokud je každý znak rovnoměrně špatně už od začátku, podezírejte samotnou velikost seskupení (příčina 1), než sáhnete na kódování.
  3. Pokud je výstup zpočátku čistý a rozpadá se v průběhu, ukazuje to přesně na zatoulaný/chybějící bit na té pozici (příčina 2), ne na problém s kódováním.
  4. Pokud seskupení i počet bitů sedí a špatně vypadají jen ne-ASCII znaky, jde o kódování znaků (příčina 3).
  5. Pokud data představují číslo, a ne text, a hodnota vypadá věrohodně, ale je špatně, zkontrolujte pořadí bajtů (příčina 4), než začnete předpokládat, že je rozbitá samotná převodní logika.

Stejně jako u hexu je samotný převodní krok triviální — skutečná chyba téměř vždy sídlí v jednom z těchto čtyř předpokladů, ne v kódu, který převod provádí.

← Zpět na blog