发布时间:2026/7/29 18:08:18
C++ 工控通用:32 位 DINT 四种字节序一键转换函数 C 工控通用32 位 DINT 四种字节序一键转换函数ABCD/CDAB/BADC/DCBA前言做 Modbus TCP/RTU 工控上位机开发最头疼的问题之一就是32 位数据字节序不统一。 PLC 的 DINT32 位有符号整数、REAL32 位浮点数占用 2 个连续 16 位寄存器不同厂商设备字节排布五花八门西门子标准ABCD大端汇川、台达、大量国产机器人CDAB、BADC部分小型控制器DCBA小端Windows 自带htonl/ntohl仅支持大小端转换无法覆盖 CDAB、BADC 这两种双字交换模式。 为此封装一个通用转换函数一次调用输出 4 种主流字节序调试、适配多品牌 PLC 非常方便。运行环境Windows MSVC / Qt MSVCx86/x64四种字节序定义说明假设 32 位原始整数0x11223344plaintextbit31~24(A) bit23~16(B) bit15~8(C) bit7~0(D) A0x11 , B0x22 , C0x33 , D0x44表格名称内存字节序列十六进制结果适用设备场景ABCDA B C D0x11223344西门子、标准大端CDABC D A B0x33441122大量国产 PLC、机器人BADCB A D C0x22114433部分运动控制器、仪表DCBAD C B A0x44332211小端模式完整源码/** * brief 32位DINT四种字节序转换函数 * param input 原始32位有符号整数(PLC DINT) * param ABCD 输出 A B C D 原始序 * param CDAB 输出 C D A B * param BADC 输出 B A D C * param DCBA 输出 D C B A * note 仅Windows MSVC环境使用适配Modbus上位机通信 */ void ABCD_SWAP(int input, int* ABCD, int* CDAB, int* BADC, int* DCBA) { // 空指针保护防止外部异常调用导致程序崩溃 if (!ABCD || !CDAB || !BADC || !DCBA) return; unsigned char A, B, C, D; unsigned int uIn (unsigned int)input; *ABCD input; // 拆分4个字节 D uIn 0xFF; C (uIn 8) 0xFF; B (uIn 16) 0xFF; A (uIn 24) 0xFF; // 重组四种字节顺序 *CDAB (unsigned int)C 24 | (unsigned int)D 16 | (unsigned int)A 8 | B; *BADC (unsigned int)B 24 | (unsigned int)A 16 | (unsigned int)D 8 | C; *DCBA (unsigned int)D 24 | (unsigned int)C 16 | (unsigned int)B 8 | A; }调用示例 单元测试#include iostream using namespace std; int main() { int ABCD, CDAB, BADC, DCBA; // 测试样例 0x11223344 ABCD_SWAP(0x11223344, ABCD, CDAB, BADC, DCBA); printf(ABCD 0x%08X\n, (unsigned int)ABCD); printf(CDAB 0x%08X\n, (unsigned int)CDAB); printf(BADC 0x%08X\n, (unsigned int)BADC); printf(DCBA 0x%08X\n, (unsigned int)DCBA); return 0; }输出结果ABCD 0x11223344 CDAB 0x33441122 BADC 0x22114433 DCBA 0x44332211关键技术要点说明1. 为什么先转 unsigned int 拆分原始参数int是有符号类型。 如果数值为负数直接input 24会触发算术右移高位补 1字节拆分出错。 先强制转为unsigned int保证逻辑右移高低字节拆分永远稳定。2. 移位操作强制转换 unsigned intunsigned char直接左移 24 位会提升为有符号 int存在符号溢出隐患。(unsigned int)C 24保证移位全程无符号运算规避未定义行为。3. 空指针判断工控软件必备上位机软件外部调用逻辑复杂如果外部传入 nullptr不做判断会直接触发访问异常、程序闪退。工业代码稳定性优先。4. 拓展同时支持 32 位浮点数 REALPLC 32 位浮点 REAL 同样 4 字节这套转换逻辑完全通用。使用方式float realVal 123.456f; int raw *(int*)(realVal); int a,b,c,d; ABCD_SWAP(raw, a, b, c, d);

相关新闻

2026/7/29 18:08:18

探索GPT-3的无限可能:gpt-3-experiments项目完整指南

探索GPT-3的无限可能:gpt-3-experiments项目完整指南 【免费下载链接】gpt-3-experiments Test prompts for OpenAIs GPT-3 API and the resulting AI-generated texts. 项目地址: https://gitcode.com/gh_mirrors/gp/gpt-3-experiments gpt-3-experiments是…

2026/7/29 18:08:18

一键永久保存你的QQ空间记忆:GetQzonehistory完整备份指南

一键永久保存你的QQ空间记忆:GetQzonehistory完整备份指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否还记得那些年在QQ空间留下的青春足迹?那些深夜的…

2026/7/29 21:34:25

跨境网站线上客服海外隐私合规设置规范

跨境网站线上客服海外隐私合规设置规范 概念定义 在跨境电商运营中,确保线上客服活动符合目标市场的数据保护和隐私法规是至关重要的。这不仅有助于维护消费者信任,还能避免因违规操作而面临的法律风险与罚款。本篇将聚焦于如何构建一个既满足业务需求…

2026/7/29 21:34:25

运维转大模型:权限日志才是 Agent 上线的生死线

聊《做过运维的人学大模型,哪些经验可以直接迁移?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要摘要:从写 Shell 脚本到构建 AIOps Agent,运维人的大模型转型不…

2026/7/29 21:34:25

权限日志才是 AI 生产的生死线,数据工程师如何接住这碗饭?

聊《别急着换赛道:大数据经验在 AI 项目里到底值多少?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要摘要:从数据工程到大模型落地,权限与日志是经常被忽视的“…

2026/7/29 21:29:24

Flask入门到实战:3天搭建AI网站(附完整代码)!

Flask入门到实战:3天搭建AI网站(附完整代码) 前言 上一篇《3个让Python代码提速10倍》获得了很多朋友的认可, 阅读量突破500,感谢大家的支持! 有读者私信问我:「学了Python基础,怎么…

2026/7/28 13:41:25

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/29 0:02:56

商标注册找代理还是自己办?算清这笔“时间账”和“风险账

商标注册,找代理还是自己办?帮你算清这笔“时间账”和“风险账”“商标注册,找代理还是自己办?”这是深圳每个创业者都会遇到的灵魂拷问。有人说找代理是花冤枉钱,有人说自己办风险太高。到底哪种更划算?本…

2026/7/29 0:02:56

免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案

免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案 【免费下载链接】openrpa Free Open Source Enterprise Grade RPA 项目地址: https://gitcode.com/gh_mirrors/op/openrpa 你是否厌倦了每天重复枯燥的数据录入和报表整理工作?是否希望有…

2026/7/29 0:02:56

KMS智能激活工具:一站式解决Windows和Office激活难题

KMS智能激活工具:一站式解决Windows和Office激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统弹出激活提示而烦恼吗?KMS智能激活工具能够帮你彻底告别W…

2026/7/29 13:12:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…