关于小端和大端的问题:
unsigned int i = 0x12345678; // assuming int is 4 bytes.
unsigned char* pc = &i;
现在,如果 *pc 为 12,则表示它是 BIG ENDIAN,因为最低地址存储 MSB,如果 78 则为 Little。我的理解正确吗?
如果是,那么我的问题是,为什么pc会得到i的最低地址?它是如何工作的?另外,存储 i 需要多少个内存地址?
假设一个 32 位架构
最佳答案
无论类型的大小如何,任何变量都将由单个地址标识。
如果int i
存储在地址0x1f00
,它占用四个字节0x1f00
,0x1f01
, 0x1f02
和 0x1f03
的空间。尽管如此,当您创建对它的引用时,您将仅获得起始地址,因为大小由类型隐含。
因此,当您创建对 int
的引用并将其转换为 char
引用时,您不会更改地址,您只需告诉编译器处理它作为 char
而不是。 IE。地址仍然是 0x1f00
,当您取消引用它时,您将读取存储在那里的任何内容,这就像您说 MSB 表示小端机器,LSB 表示大端机器。
关于c - C中的地址转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739559/