Qt 串口通信之使用16进制发送数据的转换方式

一 概述
   有时候在做上位机串口通讯时,经常需要将字符串转成16进制的形式作为发送,借此分析记录一下。
二 需求分析
//假设需要转换的字符:如下

QString str = "abcdef1234";

//需求转换成 0xab,0xcd,0xef,0x12,0x34

	由上图分析得出,很明显我们只需要拆分字符串然后再重新合并就ok啦,知道了解决方法,接下来就是上代码。
三 编写代码

方法1:

/*********************
* 功能:字符转成10进制
* Example: '9' -> 9
**********************/
int CalcCharValue(char ch)
{
int value = 0;
if(ch >= '0' && ch <= '9'){
value = ch - '0'; }else if( ch >= 'A' && ch <= 'F'){
value = ch - 'A' + 10; }else if( ch >= 'a' && ch <= 'f'){
value = ch - 'a' + 10;
} return value;
} /*********************
* 功能:转换函数
* Example: "abcdef1234" -> 0xab,0xcd,0xef,0x12,0x34
**********************/
QByteArray QStringHexToByteArrayHex(QString str)
{
QByteArray result;
QByteArray array = str.toLatin1(); /*为空不做处理*/
if(array.isEmpty())
return result; /*如果奇数时则补0*/
if(array.count() % 2 != 0){
array.append('0');
} /*转换过程*/
for(int i = 0; i < array.count(); i += 2){
char a = array.at(i);
char b = array.at(i + 1);
result.append((CalcCharValue(a) << 4) | CalcCharValue(b));
} return result;
}
调用方式:
    QByteArray hexBuf = QStringHexToByteArrayHex("abcdef1234");
qDebug() << hexBuf;
最后输出结果
"\xAB\xCD\xEF\x12""4"

方法2:

QByteArray QStringHexToByteArrayHex(QString src)
{
return QByteArray::fromHex(src.toLatin1());
}
调用方式:
    QByteArray hexBuf = QStringHexToByteArrayHex("abcdef1234");
qDebug() << hexBuf;
最后结果:
"\xAB\xCD\xEF\x12""4"
四 结束
以上可见第二种方法比较简单,很多时候Qt都帮封装好了很多有用的函数,不必要自己单独转换。

Qt 串口通信之使用16进制发送数据的转换方式的更多相关文章

  1. jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)

    转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html 性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景.因而 ...

  2. QT 串口通信 数据16进制发送

    在QT中进行串口通信时,很多情况要用到发送16进制的数据.从网上找来了一段代码测试能用: static QByteArray QString2Hex(QString str) { QByteArray ...

  3. Qt串口通信

    1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,这使得在开发者在使用Qt进行UI开发时,可以更加简单有效地实现串口通信的相关功能. 开 ...

  4. linux下的qt串口通信

    1.linux下的qt串口通信跟windows唯一的差别就是端口号的名字,windows下面是COM,而linux是ttyUSB0的路径 2.一般情况下linux插上USB转串口线就可以在/dev/目 ...

  5. Linux 虚拟串口及 Qt 串口通信实例

    Linux 虚拟串口及 Qt 串口通信实例 2011-06-22 17:49 佚名 互联网 字号:T | T Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪 ...

  6. QT串口通信编程

    QT串口编程 文件夹目录结构如下图所示 设计的示例界面如下图所示 首先在项目文件里面添加一句 QT += serialport SerialPortDemo.pro文件如下: #----------- ...

  7. Qt 串口通信

    在Qt5之前,串口通信基本依赖于第三方库,下面是我曾接触过的串口通信类库: 名称 语言 平台   QextSerialPort QT C++ Win/Linux http://sourceforge. ...

  8. Qt串口通信专题教程

    查看以前的教程:Qt编写串口通信程序全程图文讲解 查看Wincom和Lincom介绍:Qt跨平台串口通信软件Wincom与Lincom 下载软件,文档和源码:资源下载 ——————————————20 ...

  9. Qt 串口通信 高速发送出错的解决方法总结

    使用网上的qextserialport-1.2类,自行开发多线程串口通信.开发的过程中,出现两个问题:   问题1:我用信号槽跨线程调用串口类MyCom 发送和接收数据,中间运行的时候,会内存错误,Q ...

随机推荐

  1. Linux VMware Tools详解

    VMware Tools描述 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机系统进行无缝交互. 在Lin ...

  2. [DB] mysql windows 安装

    参考 mysql安装 https://www.cnblogs.com/zhangkanghui/p/9613844.html navicat for mysql 中文破解版(无需激活码) https: ...

  3. 山东浪潮超越3B4000申泰RM5120-L

    龙芯解决方案 首页 > 龙芯业务 > 龙芯解决方案和产品生态 > 整机产品 > 服务器 > 详情 超越申泰RM5120-L 服务器 超越申泰RM5120-L 服务器 20 ...

  4. MegaRAID BIOS设置阵列

    MegaRAID BIOS设置阵列 1.在初始界面可以看到physical View的界面,或者在左侧的菜单栏中点击选中即可,可以看到物理磁盘. 2.点击上一步的配置向导可以进入到配置向导界面 3.选 ...

  5. 使用cockpit管理kvm虚拟机

    在Centos8.2主机上部署kvm,使用cockpit管理 首先检测cpu是否支持虚拟化 [root@localhost ~]# cat /proc/cpuinfo | grep vmx flags ...

  6. Scala 中的可变(var)与不可变(val)

    引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...

  7. STM32定时器配置

    void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDe ...

  8. 为何存在uwsgi还要使用nginx

    nginx是对外的服务接口,外部浏览器通过url访问nginx,nginx接收到浏览器发送过来的http请求,将包解析分析url,如果是静态文件则直接访问用户给nginx配置的静态文件目录,直接返回用 ...

  9. 本地软件仓库配置及NFS安装

    [root@localhost ~]# mount /dev/cdrom /mnt mount: /dev/sr0 is write-protected, mounting read-only [ro ...

  10. Go语言协程并发---等待组sync.WaitGroup

    package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...