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 |
|