2016-06-14 9 views
7

Ich habe ein Verschlüsseln/Entschlüsseln-Programm erstellt, beim Verschlüsseln speichere ich das verschlüsselte QByteArray in einer Textdatei. Wenn ich versuche, es zu entschlüsseln, und es dann in die Entschlüsselungsmethode, das Problem ist, dass ich eine Möglichkeit, um es in QByteArray zu konvertieren, ohne das Format ändern, sonst wird es nicht richtig entschlüsseln, was ich meine ist, wenn die Datei gab mir eine verschlüsselter Wert von 1234, und ich konvertierte das zu QByteArray, indem ich 1234.toLatin1() gehe, ändert es den Wert und die Entschlüsselung funktioniert nicht. Irgendwelche Vorschläge?Qt C++ QString zu QByteArray Konvertierung

My-Code

QFile file(filename); 
    QString encrypted; 
    QString content; 

    if (file.open(QIODevice::ReadOnly)) { 
     QTextStream stream(&file); 
     content = stream.readAll(); 
    } 

    encrypted = content.replace("\n", ""); 

    qDebug() << encrypted; // Returns correct encrypted value 

    QByteArray a; 
    a += encrypted; 

    qDebug() << "2 " + a; // Returns different value than previous qDebug() 

    QByteArray decrypted = crypto.Decrypt(a, key); 
    return decrypted; 
+0

Wie haben Sie QByteArray in die Textdatei? Verwenden QTextStream schreiben oder einfach nur QFile verwenden :: schreiben? – Daniel

+0

@Daniel QTextStream – James

Antwort

13

Ich denke, man

QString::fromUtf8(const QByteArray &str) 

oder

QString::QString(const QByteArray &ba) 

zu konvertieren QByteArray zu QString verwenden sollten, dann schreiben Sie es in die Datei von QTextStream.
Affter dass, lesen Sie Datei von QTextStream verwenden

QString::toUtf8() 

QString zu QByteArray zu konvertieren.

QString :: QString (const QByteArray & ba)

Konstruiert eine Zeichenfolge mit dem Byte-Array ba initialisiert. Das angegebene Byte-Array wird unter Verwendung von fromUtf8() in Unicode konvertiert.


ps: Vielleicht QFile verwenden :: schreiben und QFile :: read ist ein besserer Weg.

+0

Ich würde lieber QString :: fromUtf8 direkt anstelle von impliziten QString <-> QByteArray-Konvertierungen verwenden, um die Konvertierung zwischen reinen Daten und Unicode explizit zu machen und die vermutete Kodierung der Daten anzugeben. –

-2

Wenn ich richtig verstehe, ist der Text aus dem Dateispeicher im QString Inhalt. Ich denke du könntest ein neues QByteArray erstellen. Da der Konstruktor eines QByteArray keinen QString als Eingabe zulässt, muss ich wahrscheinlich den QString an das leere QByteArray anhängen.

//After if: 
QByteArray tempContent(); 
tempContent.append(content); 
QByteArray decrypted = crypto.Decrypt(tempContent, key); 

Ich habe nicht viel Erfahrung in der Qt-Bibliothek, aber ich hoffe, das hilft.

+0

Dies wurde erfolgreich konvertiert, aber nach dem Test zurückgegeben '? \ X01? YJ? L? P3 &? \ X11 \ x1Bv /? X ?? c? U? ~ {? A ??' und es sollte ' ? \ u0001? YJ? l? p3 &? \ u0011 \ u001Bv /? X ?? c? U? ~ {? a ?? 'Warum könnte sich der Wert ändern? Da ich qDebug() und 'content' verwendet habe, bevor ich das' QByteArray' erstellt habe, ist der korrekte Wert – James

+0

Ich habe meinen Beitrag bearbeitet und meine ganze Funktion hinzugefügt, wenn es hilft – James

+0

Keine Ahnung, warum das so ist, ist völlig in Ordnung. – Zimano

1

Versuchen Sie es mit toLocal8Bit() .. es funktioniert gut mit mir