结构体、联合体是c语言中的构造类型,结构体我们平时应该都用得很多。但是,对于联合体,一些初学的朋友可能用得并不多,甚至感到陌生。我们先来简单看一下联合体:
union 联合名{成员表}; 成员表中含有若干成员,成员的一般形式为:类型说明符 成员名。其占用的字节数与成员中最大数据类型占用的字节数。
下面用代码进行理解:
enum data_pkg_type{ data_pkg1 = 1, data_pkg2, data_pkg3 };struct data_pkg1{ // ...};struct data_pkg2{ // ...};struct data_pkg3{ // ...};struct data_pkg{ enum data_pkg_type data_pkg_type; union { struct data_pkg1 data_pkg1_info; struct data_pkg2 data_pkg2_info; struct data_pkg3 data_pkg3_info; }data_pkg_info;}; 把struct data_pkg1、struct data_pkg2、struct data_pkg3三个结构体放到了struct data_pkg这个结构体里进行管理,把data_pkg_type与union里的三个结构体建立一一对应关系,我们需要用哪一结构体数据就通过data_pkg_type来进行选中。
在进行数据组包的时候,先给data_pkg_type进行赋值,确定数据包的类型,再给对应的union里的结构体进行赋值;在进行数据解析的时候,通过data_pkg_type来选择解析哪一组数据。
结构体部分:
#define buf_size 16union protocol_data{ uint8_t data_buffer[buf_size]; struct { uint8_t data1; uint8_t data2; uint8_t data3; uint8_t data4; // ... }data_info;}; struct里面的内容可以设计得很简单,比如全是有用的数据,或是设计得很复杂,包含一些协议头尾、包长、有效数据、校验等内容。
但无论如何,我们组包发送的过程是填充结构体->发送data_buffer;反之接收数据解析的过程就是接收数据存于data_buffer->使用结构体数据。
澳洲ACCC即将强制实施纽扣电池安全要求及指南 2022年6月22日强制实施
笔记本维护透视——外壳篇
iphone8什么时候上市?iphone8最新消息:万众期待的iPhone8将有哪些黑科技?iphone8还未上市就已在中国山寨横行?
盘点关于纯电动汽车的一些不足之处
安培显卡对比新主机,哪款成本更低?
c语言中结构体有联合体的区别
远程控制:智慧煤矿Web 2D可视化组态系统
静脉识别到底是怎样的情况
科学家通过脑机接口读取大脑特定神经信号实现“意念操作”
关于基于模型的设计开发月球探测器的机载飞行软件分析和介绍
大众和国轩高科联合对抗特斯拉的故事
iQOO Pro系列亮点一览
大厦将倾 LG战略失策可能退出中国市场
科利德赴科创板IPO:冲刺电子特种气体及半导体行业领先地位
LT1111 3V 至 5V 升压型转换器
IGBT模块电磁兼容性设计
通讯终端、集成电路、IC芯片等中电磁干扰解决方案
苹果正在研发超声波显示屏指纹扫描仪
京东方三季度面板价格全线上涨
推荐10个公认最好用的自动化连接器产品