关于共用体union笔记

本文记录了在使用union时遇到的问题,特别是uint8_t和uint16_t混用导致的批量赋值问题。解决方案是改用纯uint8_t数组,并提供了两个实用函数:arraySwitchSize用于数组大小端切换,arrayCompare用于比较数组数据是否相同。这两个函数在处理二进制数据时非常有用。
摘要由CSDN通过智能技术生成

今天找了一天的问题union共用体,在这记录一下:

1、共用体内定义最好不要 uint8_t 和 uint16_t 混用,因为我在使用过程中发现通过数组批量赋值一直有问题我屈服了,最后改用uint8_t 加数组方式,具体方式如下:

 

2、附上大小端转换函数和对比函数:


/******************************************************************************************
*** 函数名称: arraySwitchSize
*** 输入参数: pbuff:数组倒置的数组,length:数组长度
*** 返 回 值: 无
*** 说    明:数组大小端切换
*** 调度周期:无
***	编者										时间							版本
***	XX										    XXX							     XXX
******************************************************************************************/ 
void arraySwitchSize(uint8_t *pbuff, uint8_t length)
{
	uint8_t pbuf[length];
	uint8_t count;
	memcpy(pbuf, pbuff, length);						//复制出数组
	for(count =0; count <length; count ++)	//数据反向赋值
	{
		pbuff[count] = pbuf[length - count -1];
	}
}

/******************************************************************************************
*** 函数名称: arrayCompare
*** 输入参数: pbuff:对比数组1,pbuff2:对比数组2,length:对比长度
*** 返 回 值: 0:数组相同,1:数组不同
*** 说    明:数组数据是否相同对比
*** 调度周期:无
***	编者								   时间			            	版本
***	XX										XXX							XXX
******************************************************************************************/ 
uint8_t arrayCompare(uint8_t *pbuff, uint8_t *pbuff2, uint8_t length)
{
	uint8_t count;
	uint8_t ret_value =0;
	for(count =0; count <length; count ++)	//数据反向赋值
	{
		if(pbuff[count] != pbuff2[count])
		{
			ret_value =1;
			break;	                //不相同时直接退出比较
		}
	}
	return ret_value;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值