在做串口通信的时候,其中犯了一个错误。在此记录一下:QT中串口通信接到收据和发送数据的接口如下:

  1. QByteArray QIODevice::readAll()//接受数据
  2. qint64 QIODevice::write(const QByteArray & byteArray)//写入数据

接受数据和发送数据都是以 字节数组为单位的。我在ini文件存储了指令串:“01 16 7B 28 48 45 32 30 31 34 31 31 39 35 67 61 29 7D 7E 04” ,读取INI文件后,返回值为一个QVariant类型,转到QByteArray后发生错误。因为这样的转换,把QVaraint中所有的字符都当成了一个字节。例如'01'被当做'0'、‘1’,后面依次类推。当我们调用wirte函数时,因为不能正确传递我们要发送的指令串,因此modBus网络不能正常通信。因此,我们要让'01'成为一个字节,解决的办法,利用‘,’号把每一个字节隔开,存入ini文件。当用settings读取该文件时,把读取到的值转换为StringList。在用StringLIst这个字节链表,遍历后,把每个字节存入到QByteArray。

    在此要注意的一点是,当我们把“01 16 7B 28 48 45 32 30 31 34 31 31 39 35 67 61 29 7D 7E 04” 存入QByteArray是,虽然调试时看见的是其ASCII字符,但是当写入串口后,其ASCII码是固定的(每个字符为一个固定的7位二进制序列)。我们无需关心把16进制存入Byte/char时,在传递的时候发生错误。因为传递的时候,通信网络都会把ASCII字符转换为对应的ASCII码。
    思考,我想ASCII字符应该只是显示的时候出现,而char (字符型)对应数据的本质应该为一个二进制码。严格来说char其实也是一个整数类型,因为char实质上存储的是一个整数,而不是字符。比如char a = 'A'; a其实存储的是65。

串口通信中,QString 、QByteArray 转化需要注意的问题的更多相关文章

  1. 串口通信中ReadFile和WriteFile的超时详解!

    源:串口通信中ReadFile和WriteFile的超时详解! 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFi ...

  2. Linux串口通信中一种接收不到数据的问题的解决

    转载来源:嵌入式系统之初学者点滴 (百度空间) 原文 在这篇文章()中,实现了Linux环境下的串口读写操作,程序也运行成功了.但是再进一步测试时发现,如果开机之后直接如上文中所说,分别运行读程序和写 ...

  3. C#中的串口通信

    关于串行接口 串行接口(Serial port)又称“串口”,主要用于串行式逐位数据传输.常见的有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工 ...

  4. ARM学习笔记15——串口通信基本原理【转】

    计算机串口基本理论 1.什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用的设备通信的协议(不要 ...

  5. STM32串口通信USART1转USART2问题解决

    使用的是STM32f103ZET6. 1.把文件main.c和usart.c中的所有usart1换成usart2 2.查看手册得知USART2的引脚是Tx->PA2,Rx->PA3,改变u ...

  6. 51单片机GPIO口模拟串口通信

    51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于:   分类: 深入C语言(20) 作者同 ...

  7. winform SerialPort串口通信问题

    一.串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串 ...

  8. [转]C#串口通信 SerialPort类

    本文转自:https://blog.csdn.net/weixin_41415541/article/details/80921956 因为公司项目需要将USB扫码枪改为串口扫码枪,串口扫码的好处在于 ...

  9. 【Delphi】基于状态机的串口通信

    通信协议 串行通信接口(如RS232.RS485等)作为计算机与单片机交互数据的主要接口,广泛用于各类仪器仪表.工业监测及自动控制领域中. 通信协议是需要通信的双方所达成的一种约定,它对包括数据格式. ...

随机推荐

  1. Codeforces 1174A Ehab Fails to Be Thanos

    题目链接:codeforces.com/problemset/problem/1174/A 题意:给定长度2n 的数组,改变数组顺序,使得前 n 个数的和不等于 后 n 个数的和,不行输出-1. 思路 ...

  2. 20140401 cudaHOG代码

    1.cudaHOG代码(删减没有必要的目录) cudaHOGDetect需要boost库:boost_date_time-vc100-mt-1_40.lib VC++目录->附加库目录D:\bo ...

  3. upper_bound() lower_bound() 用法

    头文件 #include<algorithm> #include<iostream>#include<vector>#include<algorithm> ...

  4. PyQt5 安装及简单实例 -- 标签设置

    - 1 -    PyQt5安装,鉴于pip工具,安装其实很简单, 如下:(最好将pip索引配置成国内镜像,速度比默认的快得多) pip3 isntall PyQt5 - 2 -    利用Pycha ...

  5. dex2jar+jd-gui反编译apk的使用方法

    1.将要反编译的APK后缀名改为.rar或 .zip,并解压 2.得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出 ...

  6. zepto(mark)

    Zepto的设计目的是提供 jQuery 的类似的API,但并不是100%覆盖 jQuery .Zepto设计的目的是有一个5-10k的通用库.下载并快速执行.有一个熟悉通用的API,所以你能把你主要 ...

  7. axios调用接口

    axios调用接口 1. 按照axiosnpm install --save-dev axios2.在main.js 引入axios, 设置全局属性$http 指向axios main.js impo ...

  8. colormap 参数及对应色卡

    [参考] [1]matlab帮助文档

  9. JPA 基本使用

    ORM简介 对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换. 实现ORM思想的框架:Mybati ...

  10. jQuery ajax - post() 方法

    实例 请求 test.php 网页,忽略返回值: $.post("test.php"); TIY 实例 通过 AJAX POST 请求改变 div 元素的文本: $("i ...