将char转换为QString时遇到了一些麻烦,因为它不断转储ASCII字符而不是我想要的十六进制字节形式的总和(例如ffd0
)。
我有一些代码 - 我有一串十六进制值(A1-B2-C3
),它在QByteArray中,由我创建的checkSum函数操作。输出是校验和字节(ffd0
),并使用printf("%x", checkSum(output));
在终端上正确打印
但是当我使用Qt的ui功能时,它会打印出垃圾。
在Qt Creator上执行此操作的最有效方法是什么?
这是一些额外的澄清:
输入:
A1-B2-C3
输出:
标签 - ""(Nonsenical ascii,有时,ocasional片假名和平假名,纯粹取决于输入的十六进制)
printf - ffd0
(这是正确的输出,我想设置为标签和lineEdit的文本)
代码位:
char MainWindow::checkSum(QByteArray &b)
{
char val = 0x00;
char i;
foreach (i, b)
{
val ^= i;
}
return val;
}
...
QChar resultCh = checkSum(output);
ui->lineEdit->setText(resultCh);
ui->outputLabel->setText(resultCh);
printf("%x\n", resultCh);
...
答案 0 :(得分:1)
正确的结果不是ffd0
,而是d0
。
为什么要将char
复制到QChar
?
如果由于某种原因,你仍然想要这样做,你应该在使用之前将其转换为unicode值:
printf("%x", resultCh.unicode());
和
ui->lineEdit->setText(QString("%1").arg(resultCh.unicode(), 0, 16));
请注意printf("%x", resultCh);
在编译时会给你一个很大的警告。