Binaire vertaler
Tekst wordt binair door elk teken als een getal te coderen en dat getal in het tweetallig stelsel te schrijven. Deze vertaler gebruikt UTF-8, dus een gewone letter zoals A is één byte, 01000001, terwijl een letter met accent of een emoji twee tot vier bytes kost. Decoderen draait dat om en leest telkens acht bits.
Zo vertaal je binair
Het meeste binair dat je online vindt, is ASCII, zeven bits per teken aangevuld tot acht, en daarom decodeert het hier netjes. Voorbij de eerste 128 tekens gaan coderingen uiteen: 01000011 01100011 gaat goed, maar een é kan in Latin-1 één byte zijn en in UTF-8 twee. Deze tool schrijft en leest UTF-8, en valt terug op losse bytes als een stroom geen geldige UTF-8 is in plaats van hem te weigeren. Voor Nederlandse tekst betekent dat dat een ë in ‘ideeën’ twee bytes kost en de rest één.
De ASCII-herkenningspunten verklaren het meeste wat je ziet. Hoofdletter A is 65 en kleine a is 97: precies 32 uit elkaar, en 32 is één bit, en daarom verschillen 01000001 en 01100001 op één plek en was hoofdletters omzetten vroeger een bitbewerking in plaats van een opzoeking. Spatie is 32, het cijfer nul is 48, en het afdrukbare bereik loopt van 32 tot 126. Alles onder de 32 is een stuurcode, en daarom komt een Windows-regeleinde uit een tekstbestand binnen als twee bytes, 00001101 00001010, terwijl een Unix-regeleinde één 00001010 is.
Decoderen is de lastigere richting, omdat de bits geen eigen leestekens hebben en de splitsing moet worden aangenomen. Hier worden er acht tegelijk gelezen, met terugval op zeven als het totaal deelbaar is door zeven en niet door acht; veel geplakt puzzelbinair is 7-bits ASCII zonder aanvulling. Groepen van wisselende breedte kan geen enkele decoder terughalen, en dat is het hele argument om elk teken tot acht bits aan te vullen als je binair uitschrijft.
Waar mensen het voor gebruiken
- Een binaire reeks uit een puzzel of een CTF decoderen
- Kijken welke bits een bepaalde tekst oplevert
- Een opname op bitniveau terug als tekst lezen
- Een omzetting controleren die je met de hand hebt gedaan
- Tekencodering laten zien in een les
- Zien hoeveel bytes een accent of emoji echt kost
Vragen
01000001, code 65 aangevuld tot acht bits. Kleine a is 01100001.
Hoofdletter H, code 72. 01001000 01101001 is ‘Hi’.
Ja. Alles wat geen 0 of 1 is, wordt genegeerd, dus regeleinden, spaties en losse komma’s werken allemaal.
Acht, of overal zeven. De scheidingstekens worden genegeerd en de stroom wordt op vaste breedte gesplitst, dus groepen van wisselende lengte decoderen niet.
Dat wordt afgehandeld. Is het totaal geen heel aantal bytes maar wel een veelvoud van zeven, dan wordt het als 7-bits ASCII gelezen.
Zodat een decoder de stroom op vaste afstanden kan splitsen. Zonder aanvulling staat nergens in de bits waar het ene teken ophoudt en het volgende begint.
Ze liggen 32 uit elkaar, en 32 is één bit: 01000001 tegen 01100001. Die bit omzetten verandert de hoofdletter.
Omdat UTF-8 een variabele lengte heeft. Tekens buiten het basis-Latijnse bereik kosten twee, drie of vier bytes, en de meeste emoji vier.
Allebei, en ze zijn het eens voor de eerste 128 tekens. Daarboven schrijft dit UTF-8, dus é is 11000011 10101001 en geen enkele byte.
Het telt UTF-16-code-eenheden, en een emoji is er twee. Op positie 1 knippen splitst het paar en laat een vervangend ruitje achter.
Een MySQL-kolom van het type utf8 slaat drie bytes per teken op en emoji hebben er vier nodig. De kolom moet utf8mb4 zijn.
Dan worden ze als losse bytes gelezen in plaats van geweigerd, dus een Latin-1-stroom komt terug als iets wat je herkent in plaats van een foutmelding.
Nee. De omzetting gebeurt op deze pagina, en daarom blijft hij ook bij een heel lange plak meteen klaar.