现在的位置: 首页 > 综合 > 正文

大端小端的判断方法

2013年10月22日 ⁄ 综合 ⁄ 共 1207字 ⁄ 字号 评论关闭

首先,大端(big-endian)还是小端(little-endian)是相对于一个字来说的,指在一个字中各个字节的顺序。

如int x = 0x04030201:

若是在小端机器中,字节01存放的位置是内存中的低地址,也就是说低位存放在低地址;

若是在大端机器中,字节01存放的位置是内存中的高地址,也就是说低位存放在高地址。

具体可以通过简单的测试程序来测试

code 1:

#include <stdio.h>

int main(void)
{
	int x = 1;
	if (*(char *)(&x) == 1)
	{
		printf("Little-Endian!\n");
	}
	else
	{
		printf("Big-Endian!\n");
	}
	
	return 1;
}

x86机器中会打印Little-Endian!

code 2:(endian_2.c)

#include <stdio.h>

typedef struct tmp
{
	char a;
	char b;
	char c;
	char d;
}stEndTest;

typedef union endtest
{
	int int_;
	stEndTest stEndTest_;
}unEndTest;

int main(void)
{
	unEndTest tmp;
	tmp.int_ = 0;
	tmp.stEndTest_.a = 1;
	tmp.stEndTest_.b = 2;
	tmp.stEndTest_.c = 3;
	tmp.stEndTest_.d = 4;
	
	printf("tmp.stEndTest_.a addr:%x and a:%d\n", (int)&tmp.stEndTest_.a, tmp.stEndTest_.a);
	printf("tmp.stEndTest_.b addr:%x and b:%d\n", (int)&tmp.stEndTest_.b, tmp.stEndTest_.b);
	printf("tmp.stEndTest_.c addr:%x and c:%d\n", (int)&tmp.stEndTest_.c, tmp.stEndTest_.c);
	printf("tmp.stEndTest_.d addr:%x and d:%d\n", (int)&tmp.stEndTest_.d, tmp.stEndTest_.d);
	
	printf("tmp.int_:%x\n", tmp.int_);
	
	return 1;
}

测试如下:

[root@zx ARM_Test]# gcc -Wall -o endian_test_2 endian_2.c 
[root@zx ARM_Test]# ./endian_test_2 
tmp.stEndTest_.a addr:bf9be370 and a:1
tmp.stEndTest_.b addr:bf9be371 and b:2
tmp.stEndTest_.c addr:bf9be372 and c:3
tmp.stEndTest_.d addr:bf9be373 and d:4
tmp.int_:4030201

抱歉!评论已关闭.