Qt 串口通信之使用16进制发送数据的转换方式
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进制发送数据的转换方式的更多相关文章
- jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html 性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景.因而 ...
- QT 串口通信 数据16进制发送
在QT中进行串口通信时,很多情况要用到发送16进制的数据.从网上找来了一段代码测试能用: static QByteArray QString2Hex(QString str) { QByteArray ...
- Qt串口通信
1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,这使得在开发者在使用Qt进行UI开发时,可以更加简单有效地实现串口通信的相关功能. 开 ...
- linux下的qt串口通信
1.linux下的qt串口通信跟windows唯一的差别就是端口号的名字,windows下面是COM,而linux是ttyUSB0的路径 2.一般情况下linux插上USB转串口线就可以在/dev/目 ...
- Linux 虚拟串口及 Qt 串口通信实例
Linux 虚拟串口及 Qt 串口通信实例 2011-06-22 17:49 佚名 互联网 字号:T | T Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪 ...
- QT串口通信编程
QT串口编程 文件夹目录结构如下图所示 设计的示例界面如下图所示 首先在项目文件里面添加一句 QT += serialport SerialPortDemo.pro文件如下: #----------- ...
- Qt 串口通信
在Qt5之前,串口通信基本依赖于第三方库,下面是我曾接触过的串口通信类库: 名称 语言 平台 QextSerialPort QT C++ Win/Linux http://sourceforge. ...
- Qt串口通信专题教程
查看以前的教程:Qt编写串口通信程序全程图文讲解 查看Wincom和Lincom介绍:Qt跨平台串口通信软件Wincom与Lincom 下载软件,文档和源码:资源下载 ——————————————20 ...
- Qt 串口通信 高速发送出错的解决方法总结
使用网上的qextserialport-1.2类,自行开发多线程串口通信.开发的过程中,出现两个问题: 问题1:我用信号槽跨线程调用串口类MyCom 发送和接收数据,中间运行的时候,会内存错误,Q ...
随机推荐
- .NET平台系列10 .NET统一平台愿景
系列目录 [已更新最新开发文章,点击查看详细] 2019年,微软分享了[统一的.NET堆栈和生态系统的愿景].给开发者带来的价值是,将能够使用一组API,语言和工具来针对广泛的应用程序类型,包 ...
- golang:面向对象总结
所谓的面向对象其实就是找一个专门做这个事的人来做,不用关心具体怎么实现的.所以说,面向过程强调的是过程,步骤.而面向对象强调的是对象,也就是干事的人. Go语言:面向对象语言特性 方法 嵌入 接口 没 ...
- MergingSort
递归排序的两种实现 <script type="text/javascript"> //归并排序(递归实现) //思想:堆排序利用了完全二叉树的性质,但是比较麻烦 // ...
- Linux_交换分区SWAP
一.交换分区SWAP 1️⃣:交换分区SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用. 2️⃣:交换分区一般指定虚拟内存的大小 ...
- Linux 内存 占用较高问题排查
Linux 内存 占用较高问题排查 niuhao307523005 2019-04-24 14:31:55 11087 收藏 11展开一 查看内存情况#按 k 查看 free #按兆M查看 free ...
- 创建用户(adduser和useradd)和删除用户(userdel)
创建用户(adduser和useradd)和删除用户(userdel)及 一 用户创建命令: # adduser 用户名 # useradd 用户名 1) useradd 与 adduser ...
- cent 7 识别exfat
cent 7 识别exfat install fuse-exfat exfat-utils
- Canvas跟随鼠标炫彩小球
跟随鼠标炫彩小球 canvas没有让我失望,真的很有意思 实现效果 超级炫酷 实现原理 创建小球 给小球添加随机颜色,随机半径 鼠标移动通过实例化,新增小球 通过调用给原型新增的方法,来实现小球的动画 ...
- python类属性和实例属性的访问
- Pipe Utilization管道利用率
Pipe Utilization管道利用率 概述 CUDA设备的每个流式多处理器(SM)都具有许多专门用于执行特定任务的硬件单元.在芯片级,这些单元提供执行管道,翘曲调度程序将指令发送到这些管道.例如 ...