Qt开发串口通讯软件中的数据转换问题:读取时_QByteArray转string;发送时_数据格式;int转16进制格式string;string中截取字符;16进制数加法;string转ByteAr

在利用Qt进行串口程序开发过程中,除了与串口通讯的功能实现以外,数据的转换也是比较麻烦的一件事,本篇主要介绍串口通讯中数据转换的问题,关于功能实现大家在网上搜索就能找到相关案例。

在完成串口的初始化等功能之后,实现数据的读取转换。

参考博文:Qt总结之十五:QByteArray详解;Qt 十六进制的简单应用, 十六进制的加法;QString与QByteArray互相转换的方法;

1.读取串口命令-QByteArray转QString,QString转float

从串口接收到的数据形如:“0010101821....”的16进制数,串口返回QByteArray的数据格式,通过以下方式转换为QString,再通过截取数据中某几位,按照16进制格式转换为10进制使用。

  • QByteArray转QString
   static QString serialBuffer;

    QByteArray serialBufferTmp=m_serialPort->readAll();

    serialBuffer=serialBuffer.append(serialBufferTmp);
  • 截取第8位后4位的16进制数,并QString转float
QString strValue=serialBuffer.mid(8,4);
float floatValue=strValue.toInt(nullptr,16)

2.向串口写入命令

  • 十进制int转16进制格式string

通常我们从Qt开发的界面中使用QLineEdit输入的是十进制类型的,而为了串口处理需要将其转换为16进制格式,再通过处理成串口可以解析的格式,例如十进制50转换为16进制的“32”,代码如下:

  int Num=dec2HexInputEdit->text().toInt();

  QString hexString=QString::number(Num,16)
  • 16进制数加法

此处参考Qt 十六进制的简单应用, 十六进制的加法,它是先将数转换为10进制,相加后再转换为QString

QString hexAri(QString str, int addend)
{
	bool ok;
	int dec = str.toUInt(&ok, 16);
	QString tmp = QString("%1").arg(dec + addend, 5, 16, QLatin1Char('0');
	return tmp;
	}
  • string转ByteAr
    参考QString与QByteArray互相转换的方法;
QByteArray SettingArray=Setting.toLatin1();

你可能感兴趣的:(Qt常用知识点,qt,串口数据格式转换)