2017-01-24 31 views
0

У меня есть немного проблем с преобразованием символа в QString, поскольку он сохраняет дескрипторы символов ASCII вместо суммы, которую я хотел бы иметь в форме шестнадцатеричного байта (например, ffd0).Обработка символов ASCII в преобразовании char в QString


Немного гуляем через кода у меня есть - У меня есть строка шестнадцатеричных значений (A1-B2-C3), который находится в QByteArray и оперированных функцией CheckSum я создал. Вывод представляет собой байк контрольной суммы (ffd0), и он правильно печатается на терминале с printf("%x", checkSum(output)); , но когда я использую функции ui Qt, он печатает мусор.

Каков наиболее эффективный способ сделать это на Qt Creator?


Вот некоторые дополнительные разъяснения:

Вход:

A1-B2-C3 

Выход:

Label - "￐" (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

Проблема в том, что ваш checkSum на самом деле не является персонажем. Это целое число со знаком 8 бит. Вам нужно преобразовать это целое число со знаком в текстовую строку - не рассматривать ее как символ Юникода (именно это вы делаете в данный момент). –

ответ

1

Правильный результат не ffd0, но d0.

Почему копирование char на QChar? Если по какой-то причине, вы все еще хотите сделать это, вы должны преобразовать его в юникод значение перед использованием:

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

и:

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

Обратите внимание, что printf("%x", resultCh); должно дать вам большое предупреждение при компиляции.