【发布时间】:2013-12-15 16:45:59
【问题描述】:
以下是一段 C++ 代码,它将整数变量地址分配给字符指针。
int ia = (1<<25) + (1<<24) + (1<<17) + (1<<8) + 4;
char *cArr = (char *)(&ia);
int i;
for(i = 0; i < 4; i++){ cout << (int)cArr[i] << endl; }
我选择了整数变量,这样 MSB 字节的值可以为 3,下一个值为 2,下一个值为 1,LSB 字节的值为 4。
现在,当我将整数的地址分配给字符指针时,我得到以下结果:
cArr[0] = 4
cArr[1] = 1
cArr[2] = 2
cArr[3] = 3
我对此结果有一些疑问:
- 无论我在哪个机器上工作,LSB 字节是否总是会获得第一个地址。
- 结果与 Little Endian 和 Big Endian 有关。我也在寻找一些可以让我了解 Little Endian 和 Big Endian 的基础教程。
- 结果与堆栈在机器上的增长方式有关。
顺便说一句,我在 Windows PC 上工作
【问题讨论】:
-
为什么要写这段代码
int ia = (1<<25) + (1<<24) + (1<<17) + (1<<8) + 4; -
确实如此。它应该是
int ia = 0x03020104或至少是int ia = (3 << 24) + (2 << 16) + (1 << 8) + (4 << 0)。