在QT中将带有空间的十六进制弦分为bytearray

split hex string with spaces into bytearray in Qt

本文关键字:十六进制 bytearray 空间 QT      更新时间:2023-10-16

我是QT的新手。我正在尝试将hexa字符串与空格分开,以发送到串行端口

这是代码:

QByteArray ba;
QString sometext = ui->txtDataToSend->toPlainText();
QStringList query = sometext.split(QRegExp("\s"));
ba.resize(query.size());
for (int i = 0; i < query.size();i++) {
   ba[i] =  ?????
}
serial->write(ba);

拆分还可以,但我不知道该放在循环范围内应该放置什么

请您的建议

无需拆分十六进制的数据,只需使用 QByteArray::fromHex

QString sometext = ui->txtDataToSend->toPlainText();
QByteArray ba = QByteArray::fromHex(sometext.toLatin1());

如果您的十六进制数据无效,例如一个仅编码一个没有第一个" 0"的十六进制的字节,或者使用两个字符,则使用qString :: touint使用您的循环:

QByteArray ba;
QString sometext = ui->txtDataToSend->toPlainText();
QStringList query = sometext.split(QRegExp("\s"));
ba.resize(query.size());
for (int i=0,j=0; i < query.size();i++) {
   bool ok;
   ba[j] = query[i].toUInt(&ok,16); // convert hex number to byte
   if(ok) j++; // if invalid number we will skip 
}
ba.resize(j);
serial->write(ba);

这将解释HEX String" 12 3 4567 F0 F"与" 12 03 67 F0 0f"。

为什么不使用 QString::toAscii()QString::toLatin1()(qt5)?它为您提供了QByteArray