2016-06-14 71 views
7

我已經創建了一個加密/解密程序,加密時我將加密的QByteArray存儲在一個文本文件中。試圖解密時,我檢索它,然後將其放入解密方法,問題是我需要一種方法將其轉換爲QByteArray,而不更改格式,否則它不會正確解密,我的意思是,如果該文件給了我一個加密的值爲1234,我將它轉換爲QByteArray,通過執行1234.toLatin1()它改變了值並且解密不起作用。有什麼建議麼?Qt C++ QString到QByteArray的轉換

我的代碼

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

是怎麼寫的QByteArray到文本文件?使用QTextStream或只使用一個QFile ::寫? – Daniel

+0

@Daniel QTextStream – James

回答

13

我猜你應該使用

QString::fromUtf8(const QByteArray &str) 

QString::QString(const QByteArray &ba) 

到的QByteArray轉換爲QString的,然後通過QTextStream其寫入文件。
Affter,通過QTextStream讀文件,使用

QString::toUtf8() 

到的QString轉換爲QByteArray中。

的QString ::的QString(常量的QByteArray & BA)

構造具有字節數組BA初始化的字符串。給定的字節數組使用fromUtf8()轉換爲Unicode


PS: 也許使用一個QFile ::寫入和一個QFile ::閱讀是一種更好的方式。

+0

我寧願直接使用QString :: fromUtf8而不是隱式QString <-> QByteArray轉換,使明文數據和unicode之間的轉換顯式化,並聲明假定的數據編碼。 –

-2

如果我理解正確的話,從文件中的文本是在QString的內容存儲庫。我想你可以創建一個新的QByteArray。因爲QByteArray的構造函數不允許QString作爲輸入,所以我可能需要將QString追加到空的QByteArray。

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

我沒有太多的Qt庫經驗,但我希望這有助於。

+0

這確實轉換成功,但經過測試後返回'?\ x01?YJ?l?p3&?\ x11 \ x1Bv /?X ?? c?U?〜{?a ??',它應該是' ?\ u0001?YJ?l?p3&?\ u0011 \ u001Bv /?X ?? c?U?〜{?a ??'爲什麼值可能會改變?因爲我在創建'QByteArray'之前使用了qDebug()和'content'是正確的值 – James

+0

我已經編輯了我的帖子並添加了我的整個函數,如果有幫助 – James

+0

不知道爲什麼這會降低效果,這很好。 – Zimano

1

嘗試使用toLocal8Bit()..它正常工作與我