Comme la plupart d'entre vous le savent probablement, les mémoires matérielles (adressables en octets) peuvent être divisées en deux catégories - petit-boutien et gros-boutiste . Dans les mémoires little-endian, les octets sont numérotés en commençant par 0 à la petite extrémité (la moins significative) et dans les mémoires big-endian dans l'autre sens.
Fait amusant : ces termes sont basés sur le livre de Jonathan Swift , Gulliver's Travels, dans lequel le roi lilliputien a ordonné à ses citoyens de casser leurs œufs sur le petit bout (donc les petits-bouts) et les rebelles cassaient le leur sur le grand bout.
Comment fonctionne l'échange
Supposons que nous ayons un entier non signé (32 bits) 12648430
en mémoire, dans une machine big-endian qui pourrait ressembler à ceci:
addr: 0 1 2 3
memory: 00 C0 FF EE
En inversant l'ordre des octets, nous obtenons l'entier hexadécimal 0xEEFFC000
qui est 4009738240
en décimal.
Ta tâche
Écrivez un programme / fonction qui reçoit un entier 32 bits non signé en décimal et sort l'entier résultant lors de l'échange de l'endianité comme décrit ci-dessus.
Règles
- L'entrée sera toujours dans la plage
0
de4294967295
- La sortie peut être imprimée sur STDOUT (les sauts de ligne / espaces sont très bien) ou retournés
- L'entrée et la sortie sont en décimal
- Le comportement sur une entrée non valide n'est pas défini
Cas de test
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
est donné en décimal mais techniquement c'est en binaire en C par exemple. Vous pouvez bien sûr taper 0x2a
, ce que je voulais éviter, c'est de prendre l'entrée comme une chaîne similaire "2a"
ou similaire.