如何判断大小端字节序

字节序的概念

字节序指多字节数据中各个字节在内存中的存储顺序,分为大端字节序和小端字节序两种。

大端字节序

高位字节存储在低地址中,低位字节存储在高地址中。如图:

 

小端字节序 

高位字节存储在高地址中,低位字节存储在低地址中。如图:

 

判断大小端的第一种方法 ——指针

以数字1在内存中的存储为例。1为正数,原反补相同,如果是大端字节序,在内存中存储为

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01,如果是小端字节序,在内存中的存储为

01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.(32位机器)

通过观察可以发现,通过第一个的字节(红色部分)的值就可以判断出大小端。

请看代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int CheckSystem()
{
	int i = 1;
	char* ret = (char*)&i;
	return *ret;
}
int main()
{
	int ret = CheckSystem();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}
判断大小端的第二种方法——联合体

联合体也叫共用体,请看下面例子:

union un

{

    int  i ;

    char c;

};

以上例子中的char c 和 int i 共用一个字节。

请看代码:

#include <stdio.h>

int CheckSystem()
{
	union un
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;
}
int main()
{
	int ret = CheckSystem();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

 上述是在VS2019环境下测试。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值