一道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
你的任务是对于给定的无符号整数,输出其在内存中的十六进制表示。
输入
第一行一个数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;
}
可以用计算机算得!