大端(Big Endian)和小端(Little Endian)的区别
一、背景
在C/C++中,我们经常会处理位运算。不同的系统字节的排列就不一样,有的系统是大端排列,有的系统是小端排列。因此,处理位运算也会因不同的系统而不一样。下面我总结一下大端(Big Endian)和小端(LittleEndian)的区别。
二、大端
大端又叫网络字节序。最高有效位存储在低位内存地址,最低有效存储位存储在高位内存地址。
如下所示:int i=0x11223344的变量,最低有效位为44,最高有效位为11。在大端系统中,最高有效位存储在低地址内存中,最低有效位存储在高地址中。
三、小端
最高有效位存储在高位内存地址,最低有效位存储在最低位内存地址。
如下所示:nt i=0x11223344的变量,最低有效位为44,最高有效位为11。在小端系统中,最高有效位存储在高地址内存中,最低有效位存储在低地址中。
四、测试码码
#include <stdio.h>
int main(){
int x = 0x11223344;
char *p= (char *)&x;
char buf[20]={0};
sprintf(buf,"%x,%x,%x,%x",p[0],p[1],p[2],p[3]);
printf("%s \n",buf);
}
打印结果为:44,33,22,11。 从这个例子中能看出系统是小端系统。因为系统是小端系统所以最低有效位的值44存储在内存地址小的一端。
五、总结
1、在大端系统中,最高有效位存储在低地址内存中,最低有效位存储在高地址中。
2、在小端系统中,最高有效位存储在高地址内存中,最低有效位存储在低地址中。