串口通信中QByteArray的数据转换

本文详细介绍了QByteArray在串口通信中的数据转换,包括字符串与十六进制发送的区别,以及QByteArray如何转换成字符、数值、字符串等,并提供了大小写转换和与字符串互转的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QByteArray在串口通讯中经常被使用,通信处理过程中,经常会涉及到数据格式的转换,有一定必要较为全面详细的对QByteArray数据转换与处理部分进行阐述。本文通过以下几个部分加以介绍:

1、字符串发送与十六进制发送的区别

在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据。关于两者的区别,需要从计算机存储数据的格式说起。
在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示。在使用字符串方式发送数据的时候,串口软件首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照二进制的方式一位一位的发送出去;而使用十六进制方式发送数据的时候,串口直接将数据以二进制的方式一位一位的发送出去。
例如我们在串口软件发送框输入 “FF012345”,分别以字符串和十六进制两种方式发送:

1.1字符串发送

串口以字符串发送数据,首先将字符串转化为ASCII码对应的二进制,格式如下

0100 0110 0100 0110 0011 0000 0011 0001 0011 0010 0011 0011 0011 0100 0011 0101
F F 0 1 2 3 4 5

串口发送了8个字节,若在接收端选择字符串接收,则会接收到FF0123456这个字符串;若在接收端选择十六进制接收,则会接收到:
0100 0110 | 0100 0110 | 0011 0000 | 0011 0001 | 0011 0010 | 0011 0011 | 0011 0100 | 0011 0101 这一串数字

1.2十六进发送

串口以十六进制发送数据,首先将发送框中数据转化为如下格式:

1111 1111 0000 0001 0010 0011 0100 0101
0xFF 0x01 0x23 0x45

串口发送了4个字节,若在接收端选择十六进制接收,则会在接收框显示FF 01 23 45;若在接收端选择字符串接收,则会接收到乱码

仔细对照接收结果就很容易明白字符串发送和十六进制发送的区别了。

2、QByteArray数据转换与处理

从串口读取到的QByteArray数据,一般需要进行提取和解析,此时就需要QByteArray转换为各类型数据。常用转换包括:

1、字符与十六进制转换,例如串口接收到的数据,用字符方式表达,或者将字符串对应的十六进制数据流转化为字符串;

2、转为不同进制数值并显示,如二进制、八进制、十进制和十六进制等;

3、转为整型、浮点型等数值类型;

4、大小写转换;

5、转为字符串类型;

2.1 十六进制-字符

把Hex编码的数据流转换为char存储到QByteArray:

QByteArray text = QByteArray::fromHex("517420697320677265617421");
text.data();            //  "Qt is great!"

把QByteArray数据转换为字符串:


QByteArray ba;
ba.resize(3);
ba[0] = 0x30;
ba[1] = 0x31;
ba[2] 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值