【C语言】第六课 联合体(Union)和位域(Bit-field)

别再乱用宏定义和魔数了!用C语言联合体位域清晰管理你的协议数据包 本文探讨了如何利用C语言的联合体(union)和位域(bit-field)技术优雅地设计通信协议,避免使用宏定义和魔数带来的维护难题。通过实际代码示例展示了如何清晰管理协议数据包中的各个标志位,提升代码可读性、可维护性和类型安全性,特别适用于嵌入式系统和网络通信开发。 阅读详情

C语言中的联合体(Union)和位域(Bit-field)是处理内存布局和实现数据高效存储的强力工具,尤其在底层编程、协议解析和逆向工程中非常重要。

🧠 1. 联合体(Union)

联合体是一种特殊的自定义数据类型,它允许在同一块内存空间中存储不同类型的数据成员,但在任意时刻只能使用其中一个成员。

1.1 定义与基本使用

使用 union 关键字定义联合体,其语法与结构体类似:

union Data {
   
   
    int i;        // 整型成员
    float f;      // 浮点成员
    char str[20]; // 字符数组成员
};
  • 内存共享:所有成员共享同一段内存,联合体的大小由其最大成员决定(例如上例中约为20字节,取决于 char str[20] 和系统对齐规则)。
  • 访问成员:使用点操作符 . 访问联合体变量的成员,若通过指针访问则使用箭头操作符 ->。
    union Data data;
    data.i = 10;       // 此时联合体存储的是整数
    printf("%d\n", data.i);
    
    data.f = 220.5;    // 写入浮点数,覆盖之前的整数值
    printf("%f\n", data.f);
    
  • 初始化:联合体初始化时只能初始化其第一个成员。
    union Data data = {
         
         10}; // 正确:初始化第一个成员i
    // union Data data = {.f = 220.5}; // C99后允许指定初始化成员,但仍需注意覆盖
    
1.2 内存布局与逆向重点

联合体的所有成员都从相同的内存地址开始存储。这意味着改变一个成员的值会直接影响其他成员的值,因为它们操作的是同一片内存区域的不同解释方式。

#include <stdio.h>
#include <stdint.h>

联合体与位域 阅读详情

相关推荐

用C语言联合体(union)和位域(bit-field)优雅管理Modbus通讯状态机

本文介绍了如何利用C语言的联合体(union)和位域(bit-field)技术高效管理Modbus通讯状态机。通过5个关键技巧,包括内存布局优化、多视图访问模式设计、中断安全的原子操作、协议版本兼容性扩展和调试增强,显著提升嵌入式系统的内存利用率和代码可维护性。特别适用于485总线等资源受限的工业控制场景。

weixin_26821003的博客 353

字节序 位域 联合 (bit field and union)

在c/c++语言中,如果仅仅使用状态位。可以使用位域和联合一起来使用。但是要注意字节序问题。 例如在游戏里面可以使用 一个char 8bit 来表示8种状态。比如: 地图格式属性,BUFF状态。 union BitField {     unsigned char  flag ;     struct     {         unsigned char

sunning9001的专栏 1881

C语言联合体(union)的灵活使用

在C语言有一类数据与结构体相似,只是应用的场景不同,这类数据类型叫联合体。具体联合体的解释可以参考其他文档,本文只是从联合体数据类型推导出来的一种使用场景。在编程中经常需要给一个字节的某1个bit赋予含义,比如一个字节的bit0是操作成功,bit1 操作失败, bit2 数据读取完成等。要实现这样的功能有多种方法。

清风不知妻美的博客 763

从Modbus协议解析到C语言联合体:我是如何用位域优雅处理设备状态字的(实战分享)

本文分享了在工业通信和物联网开发中,如何利用C语言的联合体和位域特性优雅处理Modbus设备状态字。通过实战案例展示了如何替代传统的移位和掩码操作,提升代码可读性和维护性,同时确保性能和内存效率。特别适合嵌入式系统开发者优化设备状态处理逻辑。

weixin_30596735的博客 350

SAP SD信贷管理实战:从配置到风险控制的完整指南(附后台路径)

本文详细解析了SAP SD信贷管理的完整配置流程与风险控制策略,涵盖信贷控制范围设置、风险分级机制及动态控制配置。通过实战案例和后台路径指引,帮助企业实现从客户信用评估到实时监控的全流程管理,有效降低坏账风险并优化资金安全。

3a9bq4r8t2y的博客 213

「极简」扣子(coze)教程 | 细节决定成败!这个小功能让用户满意度飙升,讲的太细了

这一期大师兄通过向扣子(coze)应用添加提示语的方法向用户显示系统运行的状态。

u014527622的博客 2116

电机控制::软件架构::微型软件架构

所谓软件架构就是软件分层:HAL库,嵌入式操作系统,中间件,应用层。大型项目可参考借鉴ROS/PX4/Apollo/FMT等无人机、机器人、无人驾驶等开源项目;电机控制大型为AUTOSAR架构,小型跑裸机参考 前后台系统 或 微型实时操作系统对模块管理的思想。基本原理还是参照大型项目的架构来的,只是大部分层与块都相对简单,也没有操作系统这一层。硬件架构了解不同芯片组合及其各自的特点。1.FPGA+;2.架构;3.TC387+AUTOSAR架构,车规级,汽车领域常用。

one__leaf的博客 1695

如何提高电路的抗干扰能力

本内容详细介绍了电源传导干扰处理,包括滤波、Feedthrough电容器、磁环、磁珠、屏蔽的使用与选型,EMC电磁兼容测试项目简介与要求,单片机与电源抗干扰处理等。

让你爱上电路设计 8602

SAP GR(Group Reporting)合并报表内容及功能简介(五)-合并和抵消

随着合并和收购数量的显著增加,企业在全球经济中面临着诸多挑战。其中最常见的是法律实体与子公司之间缺乏透明度,导致无法以经济高效的方式对账法律实体与子公司之间的公司间交易,从而造成结算出现重大延迟。公司间匹配和对账功能允许用户在关账过程中进行早期分析,以避免公司间差异,并缩短关账时的延迟。公司间匹配和对账功能交易级别匹配和实时对账基于各种组织维度(如公司、利润中心和合并单位)的灵活建模自动差异解决。应用内通信和工作流。与公司间抵销集成。

weixin_43853754的博客 4400

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 959

FPGA/IC 秋招笔试/面试题总结(目录)

FPGA/IC 秋招笔试/面试题总结-目录介绍 文章目录FPGA/IC 秋招笔试/面试题总结-目录介绍一、FPGA内部资源1. 什么是FPGA2.FPGA内部资源二、同步时钟、同步/异步电路1.同步时钟2.同步/异步电路三、同步复位/异步复位1.同步复位2. 异步复位3. 异步复位同步释放四、同步FIFO/异步FIFO1.同步FIFO2.异步FIFO五、FIFO最小深度计算1.FIFO最小深度2.示例分析六、逻辑电平1.TTL电平标准2.LVTTL电平标准3.CMOS电平标准4.LVCOMS电平标准5.RS

Crazzy_M的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 【C语言】第五课 结构体与内存对齐​​
下一篇: 【C语言】第七课 字符串与危险函数​​
jiaway
博客等级 码龄11年 39粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值