大端模式: 字数据的高字节存储在低地址中,而字数据的低字节存储在高地址中。(高低低高)
小端模式: 字数据的高字节存储在高地址中,而字数据的低字节存储在低地址中。(高高低低)
大端模式的内存布局如下:
int i = 1
—————————————> 高地址
0x0 0x0 0x0 0x1
小端模式的内存布局如下:
int i = 1
———————————————->低地址
0x0 0x0 0x0 0x1
以下是两种用来检测系统是大端模式还是小端模式的测试代码
#include <stdio.h>
int checkSystem()
{
union check
{
int i;
char ch;
}c;
c.i = 1;
if(c.ch == 1){
printf("Little-endian\n");
}else{
printf("Big-endian\n");
}
}
int main()
{
checkSystem();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if (sizeof(short) == 2) {
if (un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
} else
printf("sizeof(short) = %d\n", sizeof(short));
exit(0);
}
两种测试的本质都是一样,都是利用了union关键字的特性,第一种来自《C语言深度剖析》,第二种来自另外一本书,具体的书名我忘记了。