- 论坛徽章:
- 0
|
本帖最后由 kunkka_lu 于 2011-04-09 13:06 编辑
首先, 理解 Big-Endian 和 Little-Endian;
然后, 理解数组元素在内存里的排放顺序.
char p[4] = {0x01, 0x00, 0x01, 0x00};
相当于: p[0] = 0x01, p[1] = 0x00, p[2] = 0x01, p[3] = 0x00;
由于我的机器上用的字节序是 Little-Endian, int 类型的大小是 32-bits,
所以, *(int *)p 相当于从 p 指向的内存地址开始取值, 取值的长度大小为 4 Bytes,
那么, p[3] 相当于这个值的最高一个 Byte, p[0] 相当于这个值的最低一个 Byte(在 Little-Endian 的机器上).
另外, 值得说明的是, 在每个字节内部的每个 bit 的顺序是不会随 Endian 的大小所改变的.
最后, 在我的机器上面, *(int *)p = 0x00010001 = 2^16 + 1 = 65537;
在 Big-Endian 的机器上面, *(int *)p = 0x01000100 = 2^24 + 2^8 = 16777472; |
|