edubun
Nederlands

Bytes, hexadecimaal en tekst

De letter A wordt opgeslagen als 65, of 01000001. In UTF-8 kost een Koreaanse lettergreep zoals U+D55C drie bytes.

Eerst een alledaags raadsel. (Een verzonnen voorbeeld.) Een leerling typt Korean in een chat, zes letters. Een vriend typt hetzelfde woord in Koreaans schrift, met drie lettergrepen. Welk bericht is groter? Waarschijnlijk niet wat je denkt. Als UTF-8 zijn de zes Engelse letters 6 bytes. De drie Koreaanse lettergrepen kosten 9 bytes, elk drie. RFC 3629, de UTF-8-standaard, gebruikt precies dit woord als voorbeeld met de bytes ED 95 9C EA B5 AD EC 96 B4. Twee dingen verklaren het verschil: een korte schrijfwijze voor bytes en de afspraak die letters in getallen omzet.

Twee hexadecimale cijfers per byte

Die paren letters en cijfers zijn hexadecimaal, of hex. Lange rijen nullen en enen zijn lastig te lezen; programmeurs gebruiken daarom deze korte vorm. Hex heeft zestien cijfers: 0 tot 9, dan A tot F voor tien tot vijftien. Eén hexcijfer dekt precies vier bits, dus een byte heeft altijd twee hexcijfers. Splits 01000001 in 0100 en 0001. Dat zijn 4 en 1, dus de byte is 0x41. 0x zegt alleen ‘dit is hex’. Decimaal is het 4 × 16 + 1 = 65.

Je kent hex waarschijnlijk ongemerkt. Webkleuren staan vaak als #RRGGBB, één byte voor rood, groen en blauw licht (MDN). #FF0000 is volledig rood: 255 in de eerste byte, 0 in de andere twee. #FFFFFF is wit. De grootste byte, 11111111, is 0xFF, en 0xFF = 15 × 16 + 15 = 255.

A is 65 omdat iedereen dat heeft afgesproken

Een computer weet niet wat een letter is. Hij bewaart een getal en iedereen spreekt vooraf af welk getal bij welke letter hoort. Vroege netwerken gebruikten ASCII, in 1969 vastgelegd voor ARPANET in RFC 20. ASCII gebruikt 7 bits en heeft dus 128 codes. Hoofdletter A is 65, B 66 en zo verder tot Z op 90. Kleine a is 97, precies 32 meer dan A: één bit verschil. Ook cijfers zijn codes. Het teken 0 is 48, dus ‘7’ wordt opgeslagen als 55, niet als het getal 7.

Laden

Sleep om te draaien. Scroll of knijp om te zoomen.

De schakelaars tonen 01000001, de letter A. Kies een andere letter of schakel de 32 om om tussen hoofdletters en kleine letters te wisselen.

Waarom een Koreaanse lettergreep drie bytes kost

128 codes zijn genoeg voor Engels, maar niet voor Koreaans, Arabisch, Chinees of emoji. Unicode geeft elk teken in alle schriftsystemen een eigen nummer, een codepunt, tot U+10FFFF. UTF-8 (RFC 3629) zet die meestal om in bytes, met één tot vier bytes per teken. De 128 ASCII-tekens behouden hun oude codes van één byte, dus gewone Engelse tekst is identiek in ASCII en UTF-8. De RFC-tabel zet U+0800 tot U+FFFF in de rij voor drie bytes; Koreaanse lettergrepen vallen daarin. é kost twee bytes, een lettergreep zoals U+D55C drie en een emoji zoals 😀 vier. De eerste byte meldt zelfs de lengte. ED is 11101101 en de drie bits met waarde 1 vooraan zeggen: dit teken is drie bytes lang.

TekenCodepuntUTF-8-bytes (hex)Bytes
AU+0041411
aU+0061611
éU+00E9C3 A92
Koreaanse lettergreep (U+D55C)U+D55CED 95 9C3
😀U+1F600F0 9F 98 804

Onleesbare tekst is de juiste bytes met de verkeerde afspraak lezen

Een gewoon tekstbestand is alleen een rij van deze bytes. Hello in UTF-8 is vijf bytes: hex 48 65 6C 6C 6F, of decimaal 72, 101, 108, 108, 111. De twee l's zijn dezelfde byte tweemaal. Open dat bestand, of een Koreaans bestand, nu met een verkeerde afspraak, bijvoorbeeld een oude Koreaanse of Japanse codering in plaats van UTF-8. Het programma leest dezelfde bytes als andere tekens. Het bestand is niet kapot; opnieuw als UTF-8 openen herstelt de tekst.

Waar de ontbrekende 34 GB bleven

Omdat 2 tot de macht 10 gelijk is aan 1024, dicht bij 1000, gebruikten mensen lang ‘kilobyte’ voor beide. In december 1998 keurde IEC aparte namen goed; NIST vermeldt ze: 1 kB is 1000 bytes, maar 1 KiB, een kibibyte, is 1024 bytes. 1 MB is 1 000 000 bytes, maar 1 MiB is 1 048 576 bytes. Schijffabrikanten tellen in machten van tien. Een schijf van 500 GB bevat 500 000 000 000 bytes. Een besturingssysteem dat in machten van twee telt deelt door 1 073 741 824 en toont ongeveer 465.66 GiB. De schijnbaar ontbrekende 34 waren er nooit om te verliezen. De getallen gebruiken gewoon andere eenheden. Het verschil groeit: een KiB is 2.4% groter dan een kB, een GiB ongeveer 7.4% groter dan een GB.

Veelgemaakte fouten
  • ‘1 KB is overal precies 1000 bytes.’ Volgens de standaard is kB 1000 bytes en 1024 bytes een KiB. De oude namen blijven in beide betekenissen bestaan. Volgens NIST bedoelen geheugenfabrikanten met megabyte meestal 2²⁰ bytes, opslagfabrikanten 1 000 000. De oude ‘1.44 MB’-diskette gebruikte nog een derde megabyte van 1 024 000 bytes. Let bij precieze grootte op de i: KiB, MiB, GiB.
  • ‘Mijn schijf van 500 GB kwam met 34 GB te weinig.’ 500 000 000 000 bytes ÷ 1 073 741 824 ≈ 465.66 GiB. Dezelfde bytes, andere eenheid. 500 − 465.66 ≈ 34.34 en dat is de ‘ontbrekende’ 34.
  • ‘Eén teken is altijd één byte.’ In UTF-8 geldt dit alleen voor de 128 ASCII-tekens. é kost 2 bytes, een Koreaanse lettergreep 3 en 😀 4. Een bytelimiet vult dus ongeveer driemaal sneller met Koreaanse tekst dan met Engelse.
  • ‘Het teken 7 wordt opgeslagen als het getal 7.’ Het teken ‘7’ is code 55, of 00110111. Een programma moet die tekst eerst naar het getal 7 omzetten om ermee te rekenen.
Voor de docentBegin met bytes op papier, niet definities. Schrijf Hello, zoek samen de vijf ASCII-codes op en toon dan pas hex. Daar lopen leerlingen vast. Laat ze een byte als 8 bits schrijven, halveren en elke helft in één cijfer omzetten, met een lijstje 10 = A ... 15 = F ernaast. Wijs op de 32 tussen A en a: één bit omschakelen maakt het zichtbaar. Is er een computer, bewaar dan een Engelse en een Koreaanse regel als UTF-8 en vergelijk de bestandsgrootte.
  1. Wat is 0x41 decimaal?
  2. Wat is 0xFF decimaal?
  3. Hoeveel bits stelt één hexcijfer voor?
  4. A is 65 in ASCII. Welk getal is C?
  5. Hoeveel groter is de code van a dan die van A?
  6. Hoeveel codes heeft ASCII met 7 bits?
  7. Hoeveel bytes kost de Koreaanse lettergreep U+D55C in UTF-8?
  8. Welk teken wordt opgeslagen als 01000010?
    • B
    • A
    • b
    • 2
  9. Hoeveel bytes zitten in 1 MiB?
  10. Een schijf bevat 500 000 000 000 bytes. Hoeveel GiB is dat ongeveer? (één decimaal)
Belangrijkste punten
  • Eén hexcijfer = 4 bits; een byte = twee hexcijfers (0x00 tot 0xFF).
  • ASCII: A = 65, a = 97, 0 = 48; 128 codes in 7 bits.
  • UTF-8 gebruikt 1 tot 4 bytes per teken; ASCII-tekst blijft gelijk.
  • 1 kB = 1000 B, 1 KiB = 1024 B; 1 MiB = 1 048 576 B.
Bronnen van deze cursus (10)
  • (checked 2026-10-17)
  • Standards: NIST, "Prefixes for binary multiples" (physics.nist.gov/cuu/Units/binary.html: IEC approved kibi, mebi, gibi in December 1998; 1 B = 8 bit; 1 MiB = 1 048 576 B; 1 MB = 1 000 000 B; 1 GiB = 1 073 741 824 B; historical note: memory makers usually mean 2²⁰ bytes by megabyte, storage makers 1 000 000, and the "1.44 MB" diskette uses a megabyte of 1 024 000 bytes)
  • IETF RFC 20 "ASCII format for Network Interchange" (1969, 7-bit codes, A = 65, a = 97, 0 = 48)
  • IETF RFC 3629 "UTF-8, a transformation format of ISO 10646" (2003: 1 to 4 octets per character, ASCII unchanged, code points up to U+10FFFF, U+0800 to U+FFFF take three octets, "the first octet of a multi-octet sequence indicates the number of octets", example U+D55C U+AD6D U+C5B4 = ED 95 9C EA B5 AD EC 96 B4)
  • Official documentation: MDN Web Docs, "<color>" (hexadecimal colour notation #RRGGBB)
  • Intel, "Intel Chips" timeline poster (2012: Intel 4004 of 1971 with 2,300 transistors; 2nd generation Core 2010 with 1.16 billion)
  • Teaching model: the toy computer in the network-lab scene (16 cells of 8 bits, 4-bit opcode and 4-bit address) is made for this course, not a real chip. History blocks only (the logic-gates story and the von Neumann paragraph of the-cpu): George Boole, An Investigation of the Laws of Thought (1854, Project Gutenberg 15114)
  • Claude E. Shannon, "A Symbolic Analysis of Relay and Switching Circuits", Transactions of the AIEE vol. 57 (1938)
  • abstract of his MIT master's thesis. Computer History Museum, The Silicon Engine, "1947: Invention of the Point-Contact Transistor" (Bardeen and Brattain, December 1947, germanium)
  • John von Neumann, "First Draft of a Report on the EDVAC" (30 June 1945, Moore School, reprinted in IEEE Annals of the History of Computing 15:4, 1993).

Geraadpleegd: 2026-10-17