typedef unsigned char byte;
unsigned int nines = 999;
byte * ptr = (byte *) &nines;
printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%d\n",ptr[0]);
printf ("%d\n",ptr[1]);
printf ("%d\n",ptr[2]);
printf ("%d\n",ptr[3]);
输出:
3e7
3e70
231
3
0
0
我知道前两个只是999和999 * 16的十六进制表示。剩下的4是什么意思? ptr [0]到ptr [3]?
答案 0 :(得分:6)
最有可能的是,你在32位LE系统上运行这个系统999
的十六进制是: -
00 00 03 E7
- 它存储在内存中的方式是
E7 03 00 00
因此: -
ptr[0]
指向包含E7
的字节,小数为231
ptr[1]
指向包含03
的字节,其小数为3
ptr[2]
指向包含00
的字节,小数为0
ptr[3]
指向包含00
的字节,其小数为0
HTH!
答案 1 :(得分:0)
我认为如果你写的话,你会清楚地看到:
typedef unsigned char byte;
main() {
unsigned int nines = 999;
byte * ptr = (byte *) &nines;
printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%x\n",ptr[0]);
printf ("%x\n",ptr[1]);
printf ("%x\n",ptr[2]);
printf ("%x\n",ptr[3]);
printf ("%d\n",sizeof(unsigned int));
}
char是8位,一个字节,int是4个字节(在我的64字节机器中)。 在您的机器中,数据保存为little-endian,因此首先找不到有意义的字节。