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. [刷题] 77 Combinations

    要求 给出两个整数n和k,在n个数字中选出k个数字的所有组合 示例 n=4 , k=2 [ [ 1, 2 ] , [ 1, 3 ] , [ 1, 4 ] , [ 2, 3 ] , [ 2, 4 ] , ...

  2. python发送钉钉消息

    import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...

  3. 032.Python魔术方法__new__和单态模式

    一 __new__ 魔术方法 1.1 介绍 触发时机:实例化类生成对象的时候触发(触发时机在__init__之前) 功能:控制对象的创建过程 参数:至少一个cls接受当前的类,其他根据情况决定 返回值 ...

  4. lsscsi

    # lsscsi[2:0:0:0] cd/dvd Slimtype DVD A DS8ACSH LC2M /dev/sr0[3:0:0:0] disk ATA Samsung SSD 860 3B6Q ...

  5. 那些天,shell脚本中曾经踩过的坑

    前些天,需要实现一个需求,用脚本轮流kill服务器上的进程,观察内存变化情况,并写日志.脚本逻辑不难,但shell脚本好久不用,看过书里的语法都忘得差不多了,中间踩了不少的坑,特此记录一下,留作后续参 ...

  6. Java 事务的隔离级别

    引言 之前关于事务的文章已介绍了事务的概念以及事务的四个属性(ACID),相信你对事务应该有所认识和了解. 本篇文章是关于事务的隔离性,介绍数据库提供的多种隔离级别. 数据库访问的并发性问题 所谓事务 ...

  7. android Room数据库仓库模式

  8. DDD中限界上下文与通用语言的作用

    什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即 ...

  9. libevent中的bufferevent原理

    以前的文章看过缓冲区buffer了,libevent用bufferevent来负责管理缓冲区与buffer读写事件.       今天就带大家看下evbuffer.c,使用bufferevent处理事 ...

  10. python 定时任务APScheduler 使用介绍

    python 定时任务APScheduler 使用介绍   介绍: APScheduler的全称是Advanced Python Scheduler.它是一个轻量级的 Python 定时任务调度框架. ...