Lektion
Die Theorie — Speicher und Bytes: Byte-Reihenfolge, Datentypen und Adressen
Ein Byte besteht aus acht Bits und kann einen Wert von 0 bis 255 annehmen. An jeder Speicheradresse liegt ein Byte. Eine Zahl, die mehr Platz braucht, belegt aufeinanderfolgende Adressen; bei einer 32-Bit-Ganzzahl sind es vier. Die Byte-Reihenfolge legt fest, wie diese Bytes angeordnet sind. Bei Little-Endian liegt das niederwertigste Byte an der niedrigsten Adresse, bei Big-Endian das höchstwertige. Als Ganzzahl ohne Vorzeichen gelesen ergeben vier Bytes b₀·256⁰ + b₁·256¹ + b₂·256² + b₃·256³, wobei bₖ das Byte an der Stelle k bezeichnet. Beim Lesen mit Vorzeichen wird 2³² abgezogen, wenn diese Summe mindestens 2³¹ beträgt. Beim Lesen als Gleitkommazahl werden dieselben Bits nach IEEE 754 ausgewertet.
Was die einzelnen Symbole bedeuten
bₖ- das Byte an der Stelle k, von 0 (niederwertigste Stelle) bis 3
256ᵏ- sein Stellenwert: 1, 256, 65.536 oder 16.777.216
- Setzt voraus
- Ganzzahlen mit Vorzeichen werden im Zweierkomplement dargestellt, Gleitkommazahlen nach IEEE 754 mit einfacher Genauigkeit, wie auf allen heutigen Desktop- und Smartphone-Prozessoren. Für Text gilt hier ASCII mit einem Byte pro Zeichen. UTF-8, das heute in den meisten Dateien verwendet wird, benötigt bis zu vier Bytes für ein Zeichen.
Aufgabe vollständig gelöst
-
Wie groß ist dieses Bild? 4 Schritte
Klick auf PNG-Dateikopf. Du siehst die ersten 24 Bytes einer PNG-Datei. Laut PNG-Spezifikation werden alle Ganzzahlen, die mehr als ein Byte belegen, in Big-Endian gespeichert. Der IHDR-Datenblock beginnt mit der Breite, gefolgt von der Höhe, mit jeweils vier Bytes. Bestimme Breite und Höhe. Berechne auch, welche Maße ein Programm erhalten würde, das die Bytes in Little-Endian liest.
-
Die Datei beginnt mit einer Signatur aus acht Bytes: 89 50 4E 47 0D 0A 1A 0A. Die nächsten vier Bytes geben die Länge des ersten Datenblocks in Big-Endian an: 00 00 00 0D entspricht 13. Danach folgt sein Typ, 49 48 44 52, als Text gelesen IHDR. Die Daten dieses Blocks beginnen also an Adresse 16.
-
Die Breite steht an den Adressen 16 bis 19: 00 00 01 E0. In Big-Endian liegt 01 an der Stelle 256¹ und E0, also 224, an der Stelle 256⁰: 256 + 224 = 480. Wenn du im Werkzeug ab Adresse 16 liest, erhältst du denselben Wert.
-
Die Höhe steht an den Adressen 20 bis 23: 00 00 01 0E. Das ergibt 256 + 14 = 270.
-
In Little-Endian wird das letzte Byte zum höchstwertigen. Die Breite wäre dann 224 × 256³ + 1 × 256² = 3.758.161.920 und die Höhe 14 × 256³ + 256² = 234.946.560.
Antwort
480 × 270 Pixel. In Little-Endian gelesen ergeben dieselben Bytes 3.758.161.920 × 234.946.560, also etwa 8,83 × 10¹⁷ Pixel. Bei vier Bytes pro Pixel wären das 3,53 × 10¹⁸ Bytes. Damit das Programm die Werte richtig liest, muss es die in der Spezifikation festgelegte Byte-Reihenfolge kennen; die Datei enthält dazu keinen eigenen Hinweis.
-
Lernpfad
Wie ein Computer ein Programm ausführt
Quellen (2)
- Where the names little-endian and big-endian come from, and the date the first insight gives: Danny Cohen, "On Holy Wars and a Plea for Peace." Internet Experiment Note IEN 137, 1 April 1980.
- The worked problem's file: the signature bytes, network byte order for every multi-byte integer, and the IHDR fields in order: W3C, "Portable Network Graphics (PNG) Specification (Third Edition)." W3C Recommendation, 24 June 2025.