用C进行地址转换

谦虚

与小端和大端有关的问题:

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,它占用的四个字节0x1f000x1f010x1f020x1f03空间。尽管如此,当您创建对它的引用时,您将仅获得起始地址,因为类型隐含了大小。

因此,当您创建对an的引用int并将其转换为char引用时,您无需更改地址,只需告诉编译器将其视为char替代即可。也就是说,该地址仍然是0x1f00,当您取消引用该地址时,您将读取其中存储的所有内容,就像您说的是小端字节序的MSB和大端字节序机器的LSB一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章