处理 char 到 QString 转换中的 ASCII 字符
Handling ASCII characters in a char to QString conversion
我在将 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);
...
正确的结果不是ffd0
而是d0
。
为什么要将 char
复制到 QChar
?
如果出于某种原因,你仍然想这样做,你应该在使用它之前将它转换成它的 unicode 值:
printf("%x", resultCh.unicode());
和:
ui->lineEdit->setText(QString("%1").arg(resultCh.unicode(), 0, 16));
注意printf("%x", resultCh);
编译时应该给你一个很大的警告。
我在将 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);
...
正确的结果不是ffd0
而是d0
。
为什么要将 char
复制到 QChar
?
如果出于某种原因,你仍然想这样做,你应该在使用它之前将它转换成它的 unicode 值:
printf("%x", resultCh.unicode());
和:
ui->lineEdit->setText(QString("%1").arg(resultCh.unicode(), 0, 16));
注意printf("%x", resultCh);
编译时应该给你一个很大的警告。