随笔:在C语言中如何快速的将16位数据拆开存到8位数组中

最近在过年,并且在推进导师的项目和写论文,很久没有更新了,先随便写点东西。

在大四的时候曾经遇到过,在进行串口通讯时,只能通过8位数组,8位8位的传输数据,因此有时需要读取或存储更高位的数据例如16位或32位时,就会存在数据的拆分和组合的问题。
当时的解决方法是通过定义共用体,或者对数据进行移位和取余来实现数据的拆分和组合。
现在在做项目时又遇到了以上问题,经过这段时间的学习,对C语言的理解更深刻,因此发现采用指针的方法实现起来更为便捷。
思路就是,对于数组指针,在需要进行高位的读取和拆分时,仅在需要读取和拆分的语句中,对数组指针进行指针类型的强制转换,将原来的8位数组指针转化为16位或32位指针,从而实现一次对8位的数组写入16位或读取16位。

例如

u8 a[16];   //定义一个8位数组

(*(u16 *)(a+1))=0x0F1F;    //a[1]=0x0F a[2]=0x1F

4.24日补充:但是在上面这里需要注意的是,如果直接把一个指针中的数作为u16的值赋给其他的值,需要十分注意是否存在大小端存储方面的问题(在大多数嵌入式单片机上是有大小端存储的问题的),这里点名大小端转换的问题,是因为我在使用的时候是用于上下位机通讯的,因此需要考虑到上位机和下位机之间的大小端是否不一致等问题。

11.14日补充:感谢网友对我的错误的指出,这里确实少写了一个*(取地址符)

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值