大小端模式
以前对大端和小端模式一直不太了解,而且还经常弄混淆,在此,简单的总结如下:
在计算机业界,Endian表示数据在存储器中的存放顺序。
1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
内存地址 | 小端模式存放内容 | 大端模式存放内容 |
0x4000 | 0x34 | 0x12 |
0x4001 | 0x12 | 0x34 |
Java和所有的网络通讯协议都是使用Big-Endian的编码。
按照概念,通过下列程序,可以测试出你的计算机是大端还是小端模式。
测试程序一
#include <stdio.h>
#include <stdlib.h>
int main(){
short int x = 0x1234;
char x0, x1;
x0 = ((char*)&x)[0]; //low
x1 = ((char*)&x)[1]; //high
if(x0 == 0x12 && x1 == 0x34)
printf("big endian\n");
else
printf("little endian\n");
}
测试程序二
#include <stdio.h>
#include <stdlib.h>
int main(){
union DIAN{
char tc[2];
short int inum;
};
union DIAN dian;
dian.inum = 0x1234;
if(dian.tc[0] == 0x12 && dian.tc[1] == 0x34)
printf("big endian\n");
else
printf("little endian\n");
}