2017-01-24 71 views
0

16進数のバイト形式(例えばffd0)にする代わりに、ASCII文字をダンプし続けるので、QStringにcharを変換するのに少し問題があります。QStringからQStringへの変換でASCII文字を扱う


私が持っているコードのウォークスルーのビット - 私はQByteArrayにあり、私が作成したチェックサム関数によって操作された六角値(A1-B2-C3)の列を有します。出力はチェックサムバイト(ffd0)であり、端末ではprintf("%x", checkSum(output)); と正しく表示されますが、Qtのui機能を使用しているときは、ゴミをプリントアウトします。

Qt Creatorでこれを行う最も効率的な方法は何ですか?ここで


は、いくつかの余分な明確である:

入力:

A1-B2-C3 

出力:

ラベル - "￐"(Nonsenicalアスキーと、時々、ocasionalカタカナとひらがな、入力された16進数にのみ依存)

のprintf - (適切な出力と、私はラベルとLINEEDITのテキストとして設定したいものです)ffd0


コードビット:

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ビット長の符号付き整数です。その符号付き整数をテキスト文字列に変換する必要があります。これはUnicode文字として扱われません(これはあなたが現在行っていることです)。 –

答えて

1

正しい結果はffd0ではなく、d0です。

コピーする理由charQChar? 何らかの理由で、あなたはまだこれをしたい、場合、あなたはそれを使用する前に、そのユニコード値に変換する必要があります

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

と:printf("%x", resultCh);はあなたに大きなを与える必要があることを

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

注意コンパイル中に警告します。

関連する問題