如何将字节数组元素替换为修改的十六进制 ASCII 符号?



我对QByteArray函数有问题。 我的目的是编写将编辑QByteArray的函数,即: 输入:"1W34567" 函数将0x80添加到第 2 个字符 - W。 它应该将 W(0x57 in ASCII( 替换为 ×(ASCII 中的 0xD7(。 我尝试使用以下功能解决此问题:

void MainWindow::msgModify(QByteArray& ba)
{
QByteArray t1,t2;
t1 = ba.toHex();
int b1 = t1.mid(2,2).toInt(&OK, 16);
b1+=0x80;
t2 = QByteArray::number(b1);
t2 = t2.toHex();
qDebug() << t1; //Here output is "31573334353637" - correct
t1 = QByteArray::fromHex(t1);
qDebug() << t1; //I check if it will give me orginal msg, output is "1W34567" - correct
qDebug() << b1; //215 decimal - it's correct 
qDebug() << t2; //"323135" I expect the symbol which has index 215 decimal in ASCII table but I 
//got this - why? 
} 

好的,我解决了我的问题:

void MainWindow::msgModify(QByteArray& ba)
{
QByteArray hexBa = ba.toHex();
int t = hexBa.mid(2,2).toInt(&OK,16) + 0x80;
QByteArray c;
hexBa.replace(2,2, c.setNum(t,16));
ba = QByteArray::fromHex(hexBa);
}

我希望该函数仅通过添加十六进制格式的0x80来修改第 2 个字符,即。 输入: ASCII:"123456" -> 十六进制:3132333435 输出: ASCII:"1²3456" ->十六进制:31B2333435

当然,控制台会像"1\xB2"3456"一样对其进行编码,但它没有达到,事实证明十六进制格式在我的情况下是最重要的。

最新更新