一道acm题,有关十六进制,急!~

来源:百度知道 编辑:UC知道 时间:2024/05/01 02:39:48
在IA32上无符号的整型变量在内存中是“倒”存储的,如一个整数: 305419896 换算成 16进制是0x12345678, 在内存中从低地址到高地址的4个字节里的数据分别是 0x78 0x56 0x34 0x12 。
你的任务是对于给定的无符号整数,输出其在内存中的十六进制表示。

输入
第一行一个数N,表示下面有N个测试数据。
紧接着下面N行,每行一个整数K ( 0 <= K <= 2^32 -1 )
输出
对于每个输入K, 输出其在内存中从低地址到高地址的存储数据。 表示十六进制数用到字母时,一律大写。如: 不能输出 0x1d,而要输出 0x1D。 每字节之间用空格分开,每个输出占一行。

示例输入

6
0
1
5
5987456
3000000000
305419896

示例输出

0x00 0x00 0x00 0x00
0x01 0x00 0x00 0x00
0x05 0x00 0x00 0x00
0x80 0x5C 0x5B 0x00
0x00 0x5E 0xD0 0xB2
0x78 0x56 0x34 0x12

#include <stdio.h>
#define GET_CHAR_POINTER(p) (((unsigned char*)(p)))
#define GET_CHAR(p) (*GET_CHAR_POINTER(p))
int main(void) {
unsigned int n, k;
unsigned char c, *p;
scanf("%u", &n);
for(;n>0;n--) {
scanf("%ld", &k);
p = GET_CHAR_POINTER(&k);
printf("0x%02X 0x%02X 0x%02X 0x%02X\n", GET_CHAR(p), GET_CHAR(p+1), GET_CHAR(p+2), GET_CHAR(p+3));
}
return 0;
}

可以用计算机算得!