大端小端问题,萌新求教
#include <stdio.h>int main(void)
{
int num = 0x12345678;
unsigned char *p = (unsigned char *)#
if (*p == 0x78)
{
printf("您的机器采用小端字节序。\n");
}
else
{
printf("您的机器采用大端字节序。\n");
}
printf("0x12345678 在内存中依次存放为:0x%x 0x%x 0x%x 0x%x\n", p, p, p, p);
return 0;
}
为何*p等于0x78,而p却等于78,*p指的不是数组第一位数吗,怎么二者有区别? 本帖最后由 jackz007 于 2022-12-23 23:50 编辑
我们使用的电脑采用的是 Intel(或兼容) CPU,多字节数值在内存中采用 Little-Endian 编码,一个整型数占用 4 个字节,0x12345678 在内存中的实际储存顺序为:78 56 34 12,所以,* p 指向整型数 0x12345678 实际上指向的是 78 56 34 12,所以,p = 78,p = 12。
* p = p,二者是一回事,只是表达形式有所不同而已。
int num = 0x12345678 这个数在内存中存放的顺序是(小端) 78 56 34 12
unsigned char *p = (unsigned char *)#把p指向了num的开始地址,也就是78这个位置
*p和p是同一个字节的数据,注意一下,最后打印p的时候用的是%x,所以打印出来是78,这里的78就是0x78,都是16进制数
%x是打印一个数的16进制
你直接说p等于78是错误的。
你的p是按照 %x 打印的也是16进制78,*p也是16进制78,是一样的
页:
[1]