Kaninchenbau
In einer Vorlesung taucht eine obskure Nachricht auf dem Bildschirm auf:
19 46 6F 6C 6C 6F 77 20 74 68 65 20 77 68 69 74 65 20 72 61 62 62 69 74 2E F0 9F 90 87
a)
Level 1: Wissen
Nutzen Sie eine ASCII-Tabelle, um die Hexadezimalzahlen in Zeichen zu konvertieren.
Lösung
Beispielsweise mit Hilfe von https://www.rapidtables.com/code/text/ascii-table.html:
ENDOFMEDIUM F o l l o w _ t h e _ w h i t e _ r a b b i t . F0 9F 90 87
b)
Level 3: Anwenden
Ein Teil dieser Zeichenkette konnte mit der ASCII-Tabelle nicht in eine korrekte Repräsentation umgewandelt werden. Wie erklären Sie sich diese Symbole?
Lösung
Die Nachricht setzt sich zusammen aus:
- einem nicht druckbaren Zeichen
- 24 druckbaren ASCII-Zeichen
- 4 Bytes, die nicht Teil des ASCII-Codes sind
Erklärung:
- erstes Zeichen: $19_{16} = 25_{10}$ → 24 druckbare Zeichen angekündigt (Pascal-String)
- verbleibende Zeichen codieren Unicode-Hasen 🐇: https://unicode-explorer.com/c/1F407
Berechnung des Unicode-Codepoints ausgehend von UTF-8-Kodierung:
| Hex | F0 | 9F | 90 | 87 |
|---|---|---|---|---|
| Dezimal | 240 | 159 | 144 | 135 |
| Binär | 1111.0000 | 1001.1111 | 1001.0000 | 1000.0111 |
Darin enthaltene Codepoint-Bits (oben fett hervorgehoben):
0 0001 1111 0100 0000 0111 (binär)
1 F 4 0 7 (hex)
Ergebnis: U+1F407
🐇
c)
Level 3: Anwenden
Sie erhalten nun folgende Nachricht. Sie können davon ausgehen, dass sie UTF-8-codiert ist.
01000111 01010010 01000001 01000010 01010011 11110000 10011111 10010010 10111011
Wie viele Zeichen enthält die Nachricht? Dekodieren Sie die Nachricht anhand einer geeigneten Tabelle und überprüfen Sie Ihre Vermutung.
Lösung
Jedes Byte denotiert seine Codierung in den ersten Bits:
- Ist das erste Bit eine 0, codieren die folgenden 7 Bits genau ein Zeichen im ASCII-Format.
- Beginnt ein Byte mit mindestens zwei 1en gefolgt von einer 0, gibt die Anzahl der 1en am Anfang des Bytes die Anzahl der Bytes an, die das Zeichen codieren.
- Beginnt ein Byte mit einer 10, ist es ein Folge-Byte eines bereits begonnenen Zeichens.
Die Nachricht enthält also 6 Zeichen: 5 ASCII-codierte Zeichen und ein Zeichen aus 4 Byte.
Zeichen 1 - 5:
- 0100.0111 → G
- 0101.0010 → R
- 0100.0001 → A
- 0100.0010 → B
- 0101.0011 → S
Zeichen 6:
| Hex | F0 | 9F | 92 | BB |
|---|---|---|---|---|
| Dezimal | 240 | 159 | 146 | 187 |
| Binär | 1111.0000 | 1001.1111 | 1001.0010 | 1011.1011 |
Ergebnis aus den darin enthaltenen Codepoint-Bits: U+1F4BB (💻)
1 F 4 B B
0 0001 1111 0100 1011 1011
Dekodierte Nachricht: “GRABS💻”