Wie die meisten von Ihnen wahrscheinlich wissen, können (byteadressierbare) Hardwarespeicher in zwei Kategorien unterteilt werden - Little Endian und Big Endian . In Little-Endian-Speichern werden die Bytes beginnend mit 0 am kleinen (niedrigstwertigen) Ende und in Big-Endian-Speichern umgekehrt nummeriert.
Wissenswertes : Diese Begriffe basieren auf Jonathan Swifts Buch Gullivers Reisen, in dem der lilliputanische König seinen Bürgern befahl, ihre Eier am kleinen Ende zu zerbrechen (also die Little Endians) und die Rebellen am großen Ende.
So funktioniert Tauschen
Angenommen, wir haben eine vorzeichenlose Ganzzahl (32 Bit) 12648430
im Speicher in einer Big-Endian-Maschine, die wie folgt aussehen könnte:
addr: 0 1 2 3
memory: 00 C0 FF EE
Durch Invertieren der Bytereihenfolge erhalten wir die hexadezimale Ganzzahl, 0xEEFFC000
die 4009738240
dezimal ist.
Deine Aufgabe
Schreiben Sie ein Programm / eine Funktion, die eine 32-Bit-Ganzzahl ohne Vorzeichen als Dezimalzahl empfängt und die sich ergebende Ganzzahl beim Tauschen der Endianze wie oben beschrieben ausgibt.
Regeln
- Die Eingabe wird immer im Bereich von
0
bis liegen4294967295
- Die Ausgabe kann auf STDOUT gedruckt (nachgestellte Zeilenumbrüche / Leerzeichen sind in Ordnung) oder zurückgegeben werden
- Eingabe und Ausgabe erfolgen dezimal
- Verhalten bei ungültiger Eingabe bleibt undefiniert
Testfälle
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
wird dezimal angegeben, ist aber technisch gesehen beispielsweise in C binär. Sie können natürlich eingeben 0x2a
, was ich verhindern wollte, ist die Eingabe als Zeichenfolge "2a"
oder dergleichen.