这个是一种数据流的处理办法。网络传输数据包用的比较多。SyncHead这个是包头,后面定义成void类型可扩展性好,最后应该是个crc校验。因为这段报文长度实际不知道的。需要填充后得到。我举个例子吧,我组装了两个数据包pack1 pack2 。*pdata的len是4和6,地址分别取自data1和data2两个数组那么形式如下。 uint32_t data1[4] = {xxx1 xxx2 xxx3 xxx4 };
uint32_t data2[6] = {xxx1 xxx2 xxx3 xxx4 xxx5 xxx6 };
数据包是这样:
SyncHead void *pdata crc
pack1: 0000 xxx1 xxx2 xxx3 xxx4 3745
pack2: 0001 xxx1 xxx2 xxx3 xxx4 xxx5 xxx6 5251
你这个时候取padata->pdata指向就是 32位数组data1或者data2了。但是此时你的结构体的指针是void类型的所以你要转下指针类型才能得到数据。比如你要得到data1[2]数据就要这么写。
((uint32_t *)&(padata->pdata) +2)
大概就是这样的。
其实c语言里面像memcpy这样的内存拷贝函数都是void *定义指针的,楼主可以看看。
这个是一种数据流的处理办法。网络传输数据包用的比较多。SyncHead这个是包头,后面定义成void类型可扩展性好,最后应该是个crc校验。因为这段报文长度实际不知道的。需要填充后得到。我举个例子吧,我组装了两个数据包pack1 pack2 。*pdata的len是4和6,地址分别取自data1和data2两个数组那么形式如下。 uint32_t data1[4] = {xxx1 xxx2 xxx3 xxx4 };
uint32_t data2[6] = {xxx1 xxx2 xxx3 xxx4 xxx5 xxx6 };
数据包是这样:
SyncHead void *pdata crc
pack1: 0000 xxx1 xxx2 xxx3 xxx4 3745
pack2: 0001 xxx1 xxx2 xxx3 xxx4 xxx5 xxx6 5251
你这个时候取padata->pdata指向就是 32位数组data1或者data2了。但是此时你的结构体的指针是void类型的所以你要转下指针类型才能得到数据。比如你要得到data1[2]数据就要这么写。
((uint32_t *)&(padata->pdata) +2)
大概就是这样的。
其实c语言里面像memcpy这样的内存拷贝函数都是void *定义指针的,楼主可以看看。
举报