大端字节序(big edian):
把高有效位放在低地址段,例如在按字节寻址的存储器中往地址 0x0001 存放值 0x12345678,在存储器中为
地址 数值
0x0004 0x78
0x0003 0x56
0x0002 0x34
0x0001 0x12
小字节序(little endian):
把低有效位放在低地址段,例如在按字节寻址的存储器中往地址 0x0001 存放值 0x12345678,在存储器中为
地址 数值
0x0004 0x12
0x0003 0x34
0x0002 0x56
0x0001 0x78
现在主流的CPU,intel系列的是采用的little endian的格式存放数据的。
代码实现判断(byteorder.cpp):
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main() {
union {
uint16_t s;
char c[sizeof(s)];
} un;
un.s = 0x0102;
if (2 == un.c[0] && 1 == un.c[1]) {
printf("little-endian\n");
} else if (1== un.c[0] && 2 == un.c[1]) {
printf("big-endian\n");
} else {
printf("unknown\n");
}
return 0;
}