大端小端的判断方法

首先,大端(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值