上面一个例子我们使用 union 在数据传输中优化了代码,那么 union 在数据解析中又具有什么作用呢,看下面这样一段代码: typedef union{char buffer[10];struct{char len;char CMD;char payload[7];char crc;}fields;}pack_t;void packet_handler(pack_t* packet){if(packet->fields.size > TOO_BIG){//错误}...
union MyUnion value; 变量value内存空间占用情况: 一、内存占用 结构体(struct)和联合体(union)都是由不同的数据类型成员组成的,但是结构体所有成员占用的内存空间是累加的,而联合体(union)中所有的成员公用一块地址空间。 结构体(struct)中的内存空间等于所有成员长度之和;联合体(union)成员不能同时占用内存空间,...
通过上述的这个例子可以了解,如果不使用 union 的话,在进行数据传输的时候,直接将由 struct 构造的数据形成数据帧发送过去,发送的数据包要比使用 union 构造的数据大不少,使用 union 构造数据,既能够帮助我们节省了存储空间,还节省了通信时的带宽。 3、数据解析:直观面对数据 上面一个例子我们使用 union 在数据传输...
structweek{intx;inty;strcutweekat;//在结构体又定义了名为at的一个和week同样参数的结构体变量//其中可以用.运算符访问 see.at.x see.at.y}see;但是其实这样的方式是不建议(非法)的,因为这种声明实际上是一个无限循环,成员at是一个结构体,at的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候...
这里把struct data_pkg1、struct data_pkg2、struct data_pkg3三个结构体放到了struct data_pkg这个结构体里进行管理,把data_pkg_type与union里的三个结构体建立一一对应关系,我们需要用哪一结构体数据就通过data_pkg_type来进行选中。在进行数据组包的时候,先给data_pkg_type进行赋值,确定数据包的类型,再给对应...
在C语言中定义联合体的关键字是union。 定义一个联合类型的一般形式为: union 联合名 { 成员表 }; 1. 2. 3. 4. 成员表中含有若干成员,成员的一般形式为:类型说明符 成员名。其占用的字节数与成员中最大数据类型占用的字节数。 下面我们一起看一下结构体、联合体结合使用在C语言、嵌入式中的一些实用技巧...
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack ...
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来进行选中。
嵌套的结构体: 代码语言:javascript 复制 struct week{int x;int y;strcut week at;//在结构体又定义了名为at的一个和week同样参数的结构体变量//其中可以用.运算符访问 see.at.x see.at.y}see;但是其实这样的方式是不建议(非法)的,因为这种声明实际上是一个无限循环,成员at是一个结构体, ...
在C语言中,结构体(`struct`)和联合体(`union`)是用于组合多个不同类型的数据项的数据类型。它们在数据管理和内存优化方面非常有用。下面详细介绍结构体和联合体的定义、使用和区别。 1. 结构体(`struct`) 结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。结构体成员可以是任何有效的数据类型...