大端序小端序


涉及到字节和多字节数操作,都可以用到联合体union,联合体的存放顺序是所有成员都从低地址开始存放

介绍

大端模式:是指数据的高字节保存在内存的低地址中;
小端模式:是指数据的高字节保存在内存的高地址中;
在这里插入图片描述

校验大端序小端序代码核心思路

1、利用C语言的union特性:让【8位无符号数的数组】和【32位无符号数】共享存储空间。关键点:联合体的存放顺序是所有成员都从低地址开始存放。
2、C语言中,变量的地址用整个变量在存储器中的低地址表示。
3、强制类型转换,将【32位无符号数】转换为【8位无符号数】。变量的地址不变但是长度变短,那么转换之后剩余下来的值,就是真正存放在低地址的值。
4、检查低地址中存放的值是否为0x12,如果是0x12,说明最高有效字节存放在低地址,就是大字节序;否则,就是小字节序。

校验大端序小端序代码

void check_cup(void) 
{ 
	union{ 
		int s; 
		char c[sizeof(int)]; 
	}un;
	un.s = 0x12345678;
	if (un.c[0] == 0x12) 
		printf("Big endian."); 
	else if (un.c[0] == 0x78) 
		printf("Little endian."); 
	else 
		printf("Unkown"); 
}

大端序小端序转换

int  bytes_swap_int32(int  int_value) 
{ 
	int int_swapped = (
		(int_value & 0x000000FF) << 24 
		| (int_value & 0x0000FF00) << 8 
		| (int_value & 0x00FF0000) >> 8 
		| (int_value & 0xFF000000) >> 24);
	return int_swapped; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值