无符号整数v由4个字节构成。请编程完成下述任务:
从键盘读取一个整数,存入unsinged int v;
以16进制格式打印v的值;
取v的地址,并强制类型转换成unsigned char*,然后通过这个地址/指针依次打印构成v的第0,第1,第2,第3个字节的16进制值。
输入格式:
正整数v
输出格式:
请参考样例
输入样例:
12345678
输出样例:
bc614e
4e 61 bc 0
说明:输出的第1行为无符号整数v的16进制值,第2行为构成v的四个字节各自的16进制值。
请通过这个例子的输出结果思考无符号整数v内部的存储结构,权重高的字节存储在高地址还是低地址?
代码如下:
#include<stdio.h>
int main()
{
unsigned int v;
int i;
scanf("%d",&v);
printf("%x\n",v);
unsigned char *p=(unsigned char*)&v;
for(i=0;i<sizeof(v);++i)
{
if(i<3)
{
if(sizeof(p[i])==1)
printf("%.1x ",p[i]);
else
printf("%.2x ",p[i]);
}
else
{
int t=sizeof(p[i]);
if(t==1)
printf("%.1x",p[i]);
else
printf("%.2x",p[i]);
}
}
return 0;
}