发布时间:2026/8/31 15:12:23
C++/Qt 工业协议中的数据类型的选择原则和典型用法。 一、类型对比总结类型符号大小本质在工业协议中的角色char由实现定义通常有符号1 字节C 内建字符类型不推荐用于字节操作范围 –128 ~ 127存 ≥128 的值会溢出/符号扩展unsigned char无符号1 字节C 内建无符号字节类型单字节的首选类型0~255 无歧义uint8_t无符号1 字节C11 标准 8 位整型与unsigned char等价可跨非 Qt 项目quint8无符号1 字节Qt 的typedef unsigned char quint8Qt 项目中等同于unsigned char风格统一unsigned short无符号≥2 字节通常 2 字节C 内建无符号字节类型可与uint16_t混用但大小不完全保证严格 16 位uint16_t无符号2 字节C11 标准 16 位整型存放 16 位寄存器值Modbus、Profibus 等quint16无符号2 字节Qt 的unsigned short(保证 16 位)同上Qt 专用QByteArray内部char但逻辑无符号动态Qt 字节数组容器整个报文的承载者拼接、存储、传输二、核心区别与选用原则1. 字节类型1 字节永远不要用char来存储原始字节因为它的符号性是平台相关的。0x80可能变成-128在比较和位运算中产生错误。首选unsigned char或uint8_t或quint8三者本质相同unsigned char byte1 0x80; // C 风格 uint8_t byte2 0x80; // 标准 C 风格 quint8 byte3 0x80; // Qt 风格在纯 Qt 项目中用quint8风格一致需要跨非 Qt 环境时用uint8_t2. 双字节类型16 位unsigned short是 C 内建类型标准只规定“至少 16 位”但现代平台都是 16 位。Qt 的quint16就是unsigned short并明确保证为 16 位。uint16_t是 C11 标准类型严格 16 位无符号。在跨平台或非 Qt 代码中更安全。工业协议中两者可互换但建议统一风格Qt 项目用quint16通用代码用uint16_t。注意不要混用unsigned short和uint16_t去接收同一个变量因为理论上unsigned short可能大于16位极少见不过实践中没问题。3. 字节容器QByteArray是字节流的理想容器提供自动内存管理、拼接、索引、与 C 接口互操作的能力。内部存储使用char*但 Qt 承诺将其内容视为无符号字节并提供constData()、data()等函数。读取单字节时强转成quint8或unsigned char以避免符号扩展quint8 val static_castquint8(buffer.at(0));三、工业协议中的黄金组合下面是用这些类型构建一个“写浮点数”的典型流程西门子 S7、Modbus 等场景// 1. 原始数值 float realVal ui-write_real_value-text().toFloat(); // 2. 位模式复制到32位无符号整数平台字节序无关只复制二进制 quint32 raw; std::memcpy(raw, realVal, sizeof raw); // 3. 手动将 raw 转为 4 字节大端放入 payload QByteArray payload; payload.resize(4); // 高字节在前大端 payload[0] static_castchar((raw 24) 0xFF); payload[1] static_castchar((raw 16) 0xFF); payload[2] static_castchar((raw 8) 0xFF); payload[3] static_castchar( raw 0xFF); // 4. 构造完整报文 QByteArray telegram; // 功能码单字节0x01 安全不会出现符号问题 telegram.append(static_castchar(0x01)); // 起始地址 264 (0x0108) 手动拆成大端两字节 quint16 startAddr 264; telegram.append(static_castchar((startAddr 8) 0xFF)); // 高字节 0x01 telegram.append(static_castchar( startAddr 0xFF)); // 低字节 0x08 // 追加浮点数据已经是4字节大端 telegram.append(payload); // 后续计算校验、发送...解析响应时同理// 假设 response 是从 PLC 收到的 QByteArrayoffset 是浮点数据起始偏移 const unsigned char *ptr reinterpret_castconst unsigned char*(response.constData()) offset; // 1. 手动将两个 16 位寄存器从大端转为主机字节序 quint16 regHi (static_castquint16(ptr[0]) 8) | ptr[1]; // 高16位 quint16 regLo (static_castquint16(ptr[2]) 8) | ptr[3]; // 低16位 // 2. 组合成 32 位注意 regHi 在高位 quint32 combined (static_castquint32(regHi) 16) | regLo; // 3. 位模式复制回 float float result; std::memcpy(result, combined, sizeof result); /************************************************************************ quint16 regHi (static_castquint16(ptr[0]) 8) | ptr[1]; // 高16位 quint16 regLo (static_castquint16(ptr[2]) 8) | ptr[3]; // 低16位 1. 为什么不是“转换成 8 位” 工业协议中一个 16 位寄存器本身就是 16 位的数据本来就应该用 16 位类型承载。 从字节流解析的过程就是从两个 8 位“原料”组装成一个 16 位“成品”而不是把 16 位“压缩”成 8 位。 2. 整个思路 text 字节流: [ptr[0]] [ptr[1]] ← 两个 8 位 └─高8位─┘ └─低8位─┘ ↓ 拼接 regHi (16位) ptr[0] 贡献高 8 位ptr[1] 贡献低 8 位组合起来就是原本传输的 16 位寄存器值。这个值自然要存在 quint16 变量里后续才能继续左移 16 位组合成 32 位浮点的位模式。 ************************************************************************/

相关新闻

2026/8/26 12:25:33

哔哩下载姬DownKyi:从技术原理到合规使用的完整解析

哔哩下载姬DownKyi:从技术原理到合规使用的完整解析 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xf…

2026/8/27 14:17:54

Claude Code与Codex本质区别:AI编程范式选择指南

1. 项目概述:这不是两个工具的简单“拉郎配”,而是AI编程范式的分水岭 你搜“Claude Code和Codex多维度对比”,页面上全是零散的安装报错、中文设置失败、命令行识别不了的截图,还有人发帖问“为什么我敲 claude 没反应”——这…

2026/8/25 10:18:33

从“能耗”到“能碳”:AcrelEMS 3.0如何重塑制药企业绿色智造新范式

在全球医药行业加速向绿色低碳转型的浪潮中,制药企业正面临着前所未有的挑战与机遇。作为典型的高耗能、高合规要求行业,现代制药工厂不仅需要保障极高的生产连续性与用电安全,还需应对日益严苛的碳排放核算与ESG(环境、社会和公司…

2026/8/31 15:08:51

从奇安信笔试复盘看安全测试岗的核心考点与用例设计

2019年春季校招前后,很多同学还在纠结“功能测试是不是没技术含量”的时候,奇安信的测试方向笔试已经用一张卷子把这种想法打破了大半。当时我复盘这些试题时最强烈的感受是:它不考死记硬背的工具手册,而是考你在一个真实安全产品…

2026/8/31 15:08:51

springboot某饭店点菜小程序94858-计算机课程设计、毕业设计

前言 博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你…

2026/8/31 15:08:51

MATLAB微电网优化调度实战:从建模到Cplex求解全流程

简介:本资源是一份面向电力系统方向本科生、研究生及科研初学者的MATLAB微电网优化调度实践代码,聚焦分布式能源协同控制与经济性调度建模。资源解决微电网中光伏、风电、储能等多源协调运行下的非线性约束优化问题,涵盖物理建模、逆变器控制…

2026/8/31 15:08:51

RedEvoAgent实战:用技能演化驱动LLM自动红队安全测试

RedEvoAgent 这类自动 Red-Teaming Agent,核心不是简单堆几个攻击提示词,而是让 Agent 在安全测试过程中把经验沉淀成技能,再反哺到下一轮测试里。如果你正在做 LLM 安全评估、Agent 应用上线前的安全验收,或者想给基于大模型的业…

2026/8/31 15:08:51

无人机感知技术落地地面:从大疆ROMO2看机器人感知系统迁移

这次我们来看一个很有意思的产品动向:大疆 ROMO2。从命名看它是机器人产品线的新成员,从定位看是“居家省心伙伴”,但真正值得技术人关注的是那句话——无人机感知技术落地地面。这几年大疆在无人机上积累的视觉避障、双目深度、惯性导航、地…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/31 2:14:20

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/31 1:41:28

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/8/31 0:07:32

STM32C5设备支持包(IAR DFP)安装指南与常见坑

上一阵子在IAR里折腾一块基于STM32C5系列的新板子,工程从STM32CubeMX导出来之后怎么都编译不过。报错信息很干脆:找不到设备描述文件。跟着错误路径去查,发现指向的是一个让我愣了一下的名字:STMicroelectronics.stm32c5xx.2.1.0.…

2026/8/31 0:07:32

STM32N657 SWO引脚矛盾:CubeMX显示PB3,数据手册为PB5

拿到STM32N657这颗料的第一天,我就撞上了一个让人原地懵圈的引脚矛盾:CubeMX里清清楚楚显示SWO在PB3,翻开数据手册的引脚说明表,却赫然写着PB5。对于一个靠SWO输出调试日志吃饭的人而言,这种"工具和手册打架"…

2026/8/31 12:44:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/31 9:19:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/31 6:53:02

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…