Lesestunde mit Computern

Autor(en): Tino
Mar 6, 2023

Habt ihr euch schonmal gefragt wie Computer eigentlich Dateien Lesen? Wahrscheinlich nicht. Trotzdem werde ich euch nun die Funktionsweise und Folgen erklären.


Kurz vorab. Der Eintrag ist etwas länger geworden, wenn ihr etwas bereits wisst, überspringt den Abschnitt einfach. Ich habe versucht alles möglichst verständlich zu gestalten.


Wie liest eigentlich ein Computer?

Diese Frage lässt sich relativ simpel beantworten. Eine Datei besteht aus einzelnen Bytes. Diese sind in verschidenen Formen, wie z.B. Binär formartiert. Davon habt ihr wahrscheinlich schonmal gehört, warum das aber wichtig ist, werde ich später erläutern. Diese Bytes kann der Computer nun an die CPU weitergeben, die diese verarbeitet.

Wie funktioneren also Dateien?

Diese frage beantworten wir an einer PNG Datei. Am Anfang jeder Datei steht der FileHeader, dieser kann dem Computer, unabhängig von der Dateiendung, den Dateityp mitteilen. Bei einer PNG Datei ist das z.B.

89 50 4E 47 0D 0A 1A 0A

Vielleicht ist euch schon etwas aufgefallen, die bereits genannte Binary formartierung würde nur aus Einsen und Nullen bestehen. Was ist das hier also? Diese Formatierung ist Hexadezimal, auch Hexbytes oder Hex. Hex und Binäre Schreibweisen verfügen beide über 255 verschieden Bytes. Das heißt, dass Hex und Binär problemlos untereinander konvertierbar sind. Hexadezimal ist also einfach eine, für den Menschen einfacherzu lesene, Schreibweise.

Eine Datei besteht ja aber nicht nur aus einem File header. Die restliche Daten unterscheiden sich von Datei zu Datei, da sie das tatsächlich Bild repräsentieren. Das heißt nicht, dass die Bytes zufällig zugewiesen werden, dass wäre ziemlich unnötig und kompliziert. Jeder pixel besteht aus einem Byte, der dessen Farbe repräsentiert. Dies erklärt auch warum höher aufgelöste Bilder größere Dateien darstellen, da sie einfach mehr Pixel und damit Bytes besitzen.

Zusätzlich besteht eine Datei zwar noch aus weiteren Blöcken an Bytes, die z.B. das Farbspektrum angeben. Dies wäre in meinem Beispiel z.b. :

73 52 47 42

Ich werde an dieser Stelle nicht weiter darauf eingehen, da es unzählige dieser Byte kombinationen gibt.


Was ist denn das Problem?

Neben Hexadezimal und Binär gibt es noch weitere Schreibweisen. Auf eine davon möchte ich noch einmal genauer eingehen . Niemand möchte ja seinen seitenlangen Deutschaufsatz in Hexbytes tippen. Daher gibt es auch noch ASCII. ASCII besteht vorallem aus:

  • Buchstaben (a, b, c, …)
  • Zahlen (1, 2, 3, …)
  • Controle Zeichen (NAK, EM, CAN, …)

Die ersten beiden sind ziemlich selbsterklärend. Controle Zeichen können zwar als Zeichen interpretiert werden, wurden aber vor allem für die Kommunkitaion mit Geräten, wie z.B. Druckern erfunden.

Als nächstes würde ich euch empfehlen die Umrechnungstabelle unten anzugucken, um das Problem besser zu verstehen.

Umrechnungstabelle

Wie man in der Tabelle oben erkennen kann, gibt es 255 Binär, Dezimal und Hexadezimal Werte. ASCII hingegen besitzt nur 127 Werte. Jetzt wird es für alle nicht Programmierer etwas abstrakt.

Stellt euch vor ihr habt wieder eine PNG Datei. Wie wir jetzt wissen besteht diese nur aus einfachen Bytes. Jetzt wollt ihr diese Datei auf einem selbst geschrieben Cloud-Dienst hochladen. Nun wollt ihr euer hochgeladenes Bild angucken und euer PC sagt euch, dass die eben hochgeladene PNG Datei keine PNG Datei ist und daher nicht funktioniert.

Na? Was glaubt ihr ist passiert?

Alle Bytes die einen Hexadecimalwert haben, der keinem ASCII Wert zugewiesen ist, wurde entfernt oder durch einen Fehlerbyte ersetzt.

Hier kommt auch noch einmal der FileHeader ins Spiel. Die CPU würde das Bild durch fehlende Bytes nicht nur falsch darstellen, sondern weigert sich dieses Anzuzeigen. Ohne den File Header und andere Kritische Blöcke ist es nämlich nicht mehr möglich festzustellen ob und was für eine PNG Datei vorliegt.

Aber warum?

Die Antwort ist relativ einfach. Ein Computer geht in den meisten Fällen, davon aus, dass Texte übertragen, bzw. gespeichert werden. Das heißt, dass standertmäßig ASCII genutzt wird, solange dies nicht manuell geändert wird.


Fazit

Jeder der programmiert und sich mit Dateiübertragung beschäftigt, sollte sich die Dokumentation genau durchlesen, um solche Fehler zu vermeiden. Alle Anderen werden dieses Wissen nie wieder in ihrem Leben benötigen und haben so eben 20 Minuten ihrer Zeit beim Lesen verschwendet.

Vielen Dank fürs Lesen

Umrechnungstabelle

Decimal Hex Binary ASCII
0 00 00000000 NUL (null)
1 01 00000001 SOH (start of heading)
2 02 00000010 STX (start of text)
3 03 00000011 ETX (end of text)
4 04 00000100 EOT (end of transmission)
5 05 00000101 ENQ (enquiry)
6 06 00000110 ACK (acknowledge)
7 07 00000111 BEL (bell)
8 08 00001000 BS (backspace)
9 09 00001001 HT (horizontal tab)
10 0A 00001010 LF (line feed)
11 0B 00001011 VT (vertical tab)
12 0C 00001100 FF (form feed)
13 0D 00001101 CR (carriage return)
14 0E 00001110 SO (shift out)
15 0F 00001111 SI (shift in)
16 10 00010000 DLE (data link escape)
17 11 00010001 DC1 (device control 1)
18 12 00010010 DC2 (device control 2)
19 13 00010011 DC3 (device control 3)
20 14 00010100 DC4 (device control 4)
21 15 00010101 NAK (negative acknowledge)
22 16 00010110 SYN (synchronous idle)
23 17 00010111 ETB (end of transmission block)
24 18 00011000 CAN (cancel)
25 19 00011001 EM (end of medium)
26 1A 00011010 SUB (substitute)
27 1B 00011011 ESC (escape)
28 1C 00011100 FS (file separator)
29 1D 00011101 GS (group separator)
30 1E 00011110 RS (record separator)
31 1F 00011111 US (unit separator)
32 20 00100000 space
33 21 00100001 !
34 22 00100010 "
35 23 00100011 #
36 24 00100100 $
37 25 00100101 %
38 26 00100110 &
39 27 00100111 '
40 28 00101000 (
41 29 00101001 )
42 2A 00101010 *
43 2B 00101011 +
44 2C 00101100 ,
45 2D 00101101 -
46 2E 00101110 .
47 2F 00101111 /
48 30 00110000 0
49 31 00110001 1
50 32 00110010 2
51 33 00110011 3
52 34 00110100 4
53 35 00110101 5
54 36 00110110 6
55 37 00110111 7
56 38 00111000 8
57 39 00111001 9
58 3A 00111010 :
59 3B 00111011 ;
60 3C 00111100 <
61 3D 00111101 =
62 3E 00111110 >
63 3F 00111111 ?
64 40 01000000 @
65 41 01000001 A
66 42 01000010 B
67 43 01000011 C
68 44 01000100 D
69 45 01000101 E
70 46 01000110 F
71 47 01000111 G
72 48 01001000 H
73 49 01001001 I
74 4A 01001010 J
75 4B 01001011 K
76 4C 01001100 L
77 4D 01001101 M
78 4E 01001110 N
79 4F 01001111 O
80 50 01010000 P
81 51 01010001 Q
82 52 01010010 R
83 53 01010011 S
84 54 01010100 T
85 55 01010101 U
86 56 01010110 V
87 57 01010111 W
88 58 01011000 X
89 59 01011001 Y
90 5A 01011010 Z
91 5B 01011011 [
92 5C 01011100 \
93 5D 01011101 ]
94 5E 01011110 ^
95 5F 01011111 _
96 60 01100000 `
97 61 01100001 a
98 62 01100010 b
99 63 01100011 c
100 64 01100100 d
101 65 01100101 e
102 66 01100110 f
103 67 01100111 g
104 68 01101000 h
105 69 01101001 i
106 6A 01101010 j
107 6B 01101011 k
108 6C 01101100 l
109 6D 01101101 m
110 6E 01101110 n
111 6F 01101111 o
112 70 01110000 p
113 71 01110001 q
114 72 01110010 r
115 73 01110011 s
116 74 01110100 t
117 75 01110101 u
118 76 01110110 v
119 77 01110111 w
120 78 01111000 x
121 79 01111001 y
122 7A 01111010 z
123 7B 01111011 {
124 7C 01111100 |
125 7D 01111101 }
126 7E 01111110 ~
127 7F 01111111 DEL
128 80 10000000
129 81 10000001
130 82 10000010
131 83 10000011
132 84 10000100
133 85 10000101
134 86 10000110
135 87 10000111
136 88 10001000
137 89 10001001
138 8A 10001010
139 8B 10001011
140 8C 10001100
141 8D 10001101
142 8E 10001110
143 8F 10001111
144 90 10010000
145 91 10010001
146 92 10010010
147 93 10010011
148 94 10010100
149 95 10010101
150 96 10010110
151 97 10010111
152 98 10011000
153 99 10011001
154 9A 10011010
155 9B 10011011
156 9C 10011100
157 9D 10011101
158 9E 10011110
159 9F 10011111
160 A0 10100000
161 A1 10100001
162 A2 10100010
163 A3 10100011
164 A4 10100100
165 A5 10100101
166 A6 10100110
167 A7 10100111
168 A8 10101000
169 A9 10101001
170 AA 10101010
171 AB 10101011
172 AC 10101100
173 AD 10101101
174 AE 10101110
175 AF 10101111
176 B0 10110000
177 B1 10110001
178 B2 10110010
179 B3 10110011
180 B4 10110100
181 B5 10110101
182 B6 10110110
183 B7 10110111
184 B8 10111000
185 B9 10111001
186 BA 10111010
187 BB 10111011
188 BC 10111100
189 BD 10111101
190 BE 10111110
191 BF 10111111
192 C0 11000000
193 C1 11000001
194 C2 11000010
195 C3 11000011
196 C4 11000100
197 C5 11000101
198 C6 11000110
199 C7 11000111
200 C8 11001000
201 C9 11001001
202 CA 11001010
203 CB 11001011
204 CC 11001100
205 CD 11001101
206 CE 11001110
207 CF 11001111
208 D0 11010000
209 D1 11010001
210 D2 11010010
211 D3 11010011
212 D4 11010100
213 D5 11010101
214 D6 11010110
215 D7 11010111
216 D8 11011000
217 D9 11011001
218 DA 11011010
219 DB 11011011
220 DC 11011100
221 DD 11011101
222 DE 11011110
223 DF 11011111
224 E0 11100000
225 E1 11100001
226 E2 11100010
227 E3 11100011
228 E4 11100100
229 E5 11100101
230 E6 11100110
231 E7 11100111
232 E8 11101000
233 E9 11101001
234 EA 11101010
235 EB 11101011
236 EC 11101100
237 ED 11101101
238 EE 11101110
239 EF 11101111
240 F0 11110000
241 F1 11110001
242 F2 11110010
243 F3 11110011
244 F4 11110100
245 F5 11110101
246 F6 11110110
247 F7 11110111
248 F8 11111000
249 F9 11111001
250 FA 11111010
251 FB 11111011
252 FC 11111100
253 FD 11111101
254 FE 11111110
255 FF 11111111