处理char到QString转换中的ASCII字符

时间:2017-01-24 07:31:36

标签: c++ qt type-conversion ascii non-ascii-characters

将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);
...

1 个答案:

答案 0 :(得分:1)

正确的结果不是ffd0,而是d0

为什么要将char复制到QChar? 如果由于某种原因,你仍然想要这样做,你应该在使用之前将其转换为unicode值:

printf("%x", resultCh.unicode());

ui->lineEdit->setText(QString("%1").arg(resultCh.unicode(), 0, 16));

请注意printf("%x", resultCh);在编译时会给你一个很大的警告。