1:认识
对于一个int类型的数字,如int data=0x01234567; 最高位是0x01 最低位是 0x67
大端存储: 高位字节排在内存的低地址,低位字节排在内存的高地址端 ==》符合我们的阅读
小端存储:低位字节排在内存的低地址 高位字节排在内存的高地址端 ==》计算机电路先处理低位字节,效率较高
2:demo
//测试本机是大端还是小段: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> int main() { int data=0x01234567; //高字节是0x01 //以十六进制输出数据 及该数据对应的地址 printf("data:[%x] data_addr:[%p] \n",data, &data); char *c_data = (char *)&data; for(int i=0; i<4;i++) { printf("addr[%p]==>%x \n", c_data+i, *(c_data+i)); } //高位字节排在内存的低地址,低位字节排在内存的高地址端 为大端 //低位字节排在内存的低地址 高位字节排在内存的高地址端 为小端 if(*c_data == 0x01) //低位存高字节 { printf("this is big endian\n"); }else{ //低位存低字节 printf("this is little endian\n"); } //字节序的转换 data = htonl(data); printf("data is :%x data_addr:[%p] \n", data, &data); for(int i=0; i<4;i++) { printf("addr[%p]==>%x \n", c_data+i, *(c_data+i)); } return 0; } /************************************************* hlp@ubuntu:~/0922$ ./big data:[1234567] data_addr:[0x7ffcd98f44a8] addr[0x7ffcd98f44a8]==>67 addr[0x7ffcd98f44a9]==>45 addr[0x7ffcd98f44aa]==>23 addr[0x7ffcd98f44ab]==>1 根据输出结果,说明我的电脑内存是小端 计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。 所以,计算机的内部处理都是小端字节序。 但是,人类还是习惯读写大端字节序。 所以,除了计算机的内部处理,其他的场合几乎都是大端字节序, 比如网络传输和文件储存 *************************************************/