众所周知,(字节可寻址的)硬件存储器可分为两类:little-endian和big-endian。在小端存储中,字节在小(最低有效)端从0开始编号,而在大端存储则以相反的方式编号。
有趣的事实:这些用语基于乔纳森·斯威夫特(Jonathan Swift)的《格列佛游记》(Gulliver's Travels),其中小人国国王下令其公民在小端(因此,小端)破蛋,而叛军则在大端破其卵。
交换的工作方式
假设我们12648430
在big-endian机器中的内存中有一个无符号整数(32位),看起来可能如下:
addr: 0 1 2 3
memory: 00 C0 FF EE
通过反向字节顺序,我们得到的十六进制整数0xEEFFC000
是4009738240
十进制。
你的任务
编写一个程序/函数,该程序/函数接收十进制的无符号32位整数,并在如上所述交换字节序时输出结果整数。
规则
- 输入将始终在范围
0
至4294967295
- 可以将输出打印到STDOUT(跟踪换行符/空格很好)或返回
- 输入和输出均为十进制
- 无效输入的行为未定义
测试用例
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
以十进制表示,但从技术上讲,它以C语言表示为二进制。您当然可以输入0x2a
,我想防止的是将输入作为字符串"2a"
之类的。