2017-01-24 5 views
0

Ich habe ein bisschen Probleme mit der Umwandlung eines Zeichens in QString, da es weiterhin ASCII-Zeichen statt der Summe, die ich gerne in seinem Hex Byte-Form (z. B. ffd0) sein würde.Behandeln von ASCII-Zeichen in einem Zeichen zu QString-Konvertierung


Ein bisschen von einem Spaziergang durch den Code, den ich habe - ich habe eine Reihe von Hex-Werte (A1-B2-C3), die in einem QByteArray ist und durch eine Prüfsumme Funktion operiert ich geschaffen habe. Die Ausgabe ist ein Prüfsummenbyte (ffd0) und es wird richtig auf dem Terminal mit printf("%x", checkSum(output)); gedruckt, aber wenn ich die ui Funktionen von Qt verwende, druckt es Müll aus.

Was ist der effizienteste Weg, dies auf dem Qt Creator zu tun? Hier


ist einige zusätzliche Klarstellung:

Eingang:

A1-B2-C3 

Ausgang:

Etikett - "￐" (Nonsenical ascii und manchmal die ocasional Katakana und Hiragana, rein abhängig vom eingegebenen Hex)

printf - ffd0 (Welche die richtige Leistung und das ist, dass ich als Text des Etiketts und LineEdit setzen mag)


-Code Bit:

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

Das Problem ist, dass Ihre checkSum nicht wirklich ein Charakter ist. Es ist eine vorzeichenbehaftete ganze Zahl, die 8 Bits lang ist. Sie müssen diese vorzeichenbehaftete Ganzzahl in eine Textzeichenfolge konvertieren - behandeln Sie sie nicht als Unicode-Zeichen (was Sie gerade tun). –

Antwort

1

Das korrekte Ergebnis ist nicht ffd0, sondern d0.

Warum kopieren char zu QChar? Wenn aus irgendeinem Grund, Sie immer noch, dies tun möchten, sollten Sie es auf seine Unicode-Wert konvertiert werden, bevor es mit:

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

und:

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

Beachten Sie, dass printf("%x", resultCh); sollten Sie einen großen geben während der Kompilierung warnen.

Verwandte Themen