最近在过年,并且在推进导师的项目和写论文,很久没有更新了,先随便写点东西。
在大四的时候曾经遇到过,在进行串口通讯时,只能通过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日补充:感谢网友对我的错误的指出,这里确实少写了一个*(取地址符)