【发布时间】:2017-01-24 07:31:35
【问题描述】:
我在将 char 转换为 QString 时遇到了一些麻烦,因为它一直在转储 ASCII 字符,而不是我想要的十六进制字节形式的总和(例如ffd0)。
对我所拥有的代码进行一些浏览 - 我有一个十六进制值字符串 (A1-B2-C3),它位于 QByteArray 中,并由我创建的 checkSum 函数进行操作。输出是一个校验和字节(ffd0),它在终端上正确打印为printf("%x", checkSum(output));
但是当我使用 Qt 的 ui 功能时,它会打印出垃圾。
在 Qt Creator 上执行此操作的最有效方法是什么?
这里有一些额外的说明:
输入:
A1-B2-C3
输出:
标签 - “”(无意义的 ascii,有时还有偶尔出现的片假名和平假名,完全取决于输入的十六进制)
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);
...
【问题讨论】:
-
问题是您的 checkSum 并不是一个真正的字符。它是一个 8 位长的有符号整数。您需要将该有符号整数转换为文本字符串 - 不要将其视为 Unicode 字符(这就是您目前正在做的事情)。
标签: c++ qt type-conversion ascii non-ascii-characters