朱有鹏老师课程总结-大小端模式的测试方法

大端模式:一个数据的高字节对应到内存的低地址处。
小端模式:一个数据的低字节对应到内存的低地址处。

比如:两种模式下存放数据0X87 65 43 21
大端模式在内存中存放数据
内存地址高到低,高地址----->低地址
0X21 ,0X43 ,0X65 ,0X87

小端模式在内存中存放数据
内存地址高到低,高地址----->低地址
0X87 ,0X65 ,0X43 ,0X21

测试大小端的方式
用UNION,共用体的方法测试

typedef union
{
	int a;
	char b;
}t_union;

int main(void)
{
	t_union u1;
	u1.a = 1;
	if(u1.b == 1)
	{
		printf("当前是小端模式\n");
	}
	else
	{
		printf("当前是大端模式\n");
	}
	return 0;
}

输出结果,如果是大端模式,u1.b的值为0;如果是小端模式,u1.b的值是1。

用指针的方式测试

int main(void)
{
	int a = 1;
	char *p = NULL;
	p = (char *)&a;
	printf("*p = %d\n",*p);
	if(*p == 1)
	{
		printf("当前是小端模式\n");
	}
	else
	{
		printf("当前是大端模式\n");
	}
	return 0;
}

输出结果,如果是大端模式,*p的值为0;如果是小端模式,*p的值是1。

用位于运算,移位,强制类型转换的方法测试大小端是没用的。因为不论一个变量的值在内存中被怎么放置,到了编译器层面去操作这些变量的值,这个变量永远是左边为高位,右边为低位。(就是在内存中可能高地址放低字节,低地址放高字节,但是编译器都认为这个变量是一个左边为高位,右边为低位的变量)

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页