处理 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);编译时应该给你一个很大的警告。