网站首页 > 博客文章 正文
德国设备通信卡死,转换指令全失效,程序员半夜拆解指针密码。
最近公司在搞个德国老设备改造,跟MES系统连不上。问题出在数据通信上,PLC只能发字节数据,而德国人原来的程序用了字符串,一运行就报错。本来以为有个现成的字符串转字节指令能用,结果发现这玩意只能转数字字符串。
比如把"ABCDEFG"扔进去,出来的全是0。改成"20"倒没问题,出来就是十进制20的字节码。明明看着是通用指令,关键时刻完全没用,气得我直跺脚。
后来只好研究指针。先定义个叫pKeyword的指针指向字符串地址,再定义pSendToMes指向要发出去的字节数组。然后循环次数等于字符串长度,每次循环把当前字符对应的字节复制过去,指针往后移一个位置。
具体操作就是先取地址赋给指针,循环里用pKeyword^取当前字符的值,赋给pSendToMes的位置。接着两个指针都加1,指向下一位。循环七次刚好把"ABCDEFG"七个字母转成对应ASCII码的字节。
试了下效果不错,七个字节显示41到47,正好是大写字母A到G的ASCII码。不过刚开始没搞懂指针偏移那步,调试了两小时才发现要每次循环都动指针。
原来字符串在内存里是连续存放的,指针就像游标一样一个个过。但第一次用指针操作数组时,总容易算错步长,多亏有调试器能看内存地址变化。
最后把转换后的字节数组发出去,MES那边正常接收到了。虽然过程绕了一大圈,但总算找到了靠谱方法。现在公司其他人遇到同样问题都会拿这个当模板改。
后来这项目就顺利交了,虽然累死我也学到了不少。现在偶尔还会看看那段代码,指针确实有点意思。
猜你喜欢
- 2025-08-02 Python 中 必须掌握的 20 个核心函数—len()函数
- 2025-08-02 EXCEL如何用函数读取复杂字符串中的数据
- 2025-08-02 2025-07-19:计算字符串的镜像分数。用go语言,给定一个字符串 s
- 2025-08-02 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度
- 2024-08-13 「C语言初级」.字符串基本操作之一
- 2024-08-13 Golang: string vs []byte 高阶篇03
- 2024-08-13 本周第二题,模拟竖式计算,比较两个字符串的每一位。
- 2024-08-13 Python合集之Python字符串常用操作(一)
- 2024-08-13 C字符串搜索和替换算法(字符串的查找与替换)
- 2024-08-13 超简单的在线实时字数统计工具(字数统计工具app)
你 发表评论:
欢迎- 最近发表
-
- Python 中 必须掌握的 20 个核心函数—len()函数
- 用PLC的指针实现字符串转byte(Codesys平台)一文极简搞懂指针
- EXCEL如何用函数读取复杂字符串中的数据
- 2025-07-19:计算字符串的镜像分数。用go语言,给定一个字符串 s
- 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度
- 基于物理特征融合与机器学习的多井协同钻井速率实时预测与优化(
- [电子学报文章精选]一种基于特征融合的恶意代码快速检测方法
- 强大的可视化流程图编辑神器 — LogicFlow
- 前端框架太卷了!字节企业级框架Arco Design Mobile开源了
- Vue独立组件——11个最佳Vue.js日期选择器组件
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)