2016-06-14 25 views
7

Şifreli bir QByteArray dosyasını bir metin dosyasına depolarken şifreleme/şifre çözme programı oluşturdum. Şifresini çözmeye çalışırken onu alıp şifre çözme yöntemine koymalıyım, sorun şu ki formatı değiştirmeden QByteArray'a dönüştürmenin bir yolunu kullanmam gerekiyor, aksi halde dosyanın düzgün bir şekilde şifresini çözmeyecek, yani dosya bana bir 1234'ün şifrelenmiş değeri ve bunu 1234.toLatin1() ile QByteArray'a dönüştürdüm, değeri değiştirir ve şifre çözme çalışmaz. Baska öneri? Doğru anladıysam,Qt C++ QByteArray Dönüştürme QString

Benim Kod

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

nasıl? Metin dosyasına QByteArray yazma Kullanım QTextStream ya da sadece QFile kullandı benimle iyi çalışıyor :: yazma? – Daniel

+0

@Daniel QTextStream – James

cevap

13

Ben o zaman QTextStream tarafından dosyaya yazan, QString için QByteArray dönüştürmek için

QString::fromUtf8(const QByteArray &str) 

veya

QString::QString(const QByteArray &ba) 

kullanmalıdır sanırım. Bu Affter
, QTextStream dosyayı okumak QByteArray için QString dönüştürmek için

QString::toUtf8() 

kullanın.

QString :: QString (const QByteArray & ba)

bayt dizisi ba ile başlatılan bir dizi oluşturur. Verilen bayt dizisi, fromUtf8() kullanılarak Unicode 'a dönüştürülür.


ps: Belki QFile kullanmak :: yazıp QFile :: daha iyi bir yoludur okuyun.

+0

Düz veri ve unicode arasında dönüştürmeyi açık yapmak ve verilerin varsayılan kodlamasını belirtmek için, örtülü QString <-> QByteArray dönüşümleri yerine QString :: fromUtf8'i doğrudan kullanmayı tercih ederim. –

-2

, dosyadan metin QString içeriğindeki mağaza. Yeni bir QByteArray oluşturabileceğinizi düşünüyorum. Bir QByteArray öğesinin yapıcısı QString'e girdi olarak izin vermediğinden, muhtemelen QString'i boş QByteArray öğesine eklemem gerekecek.

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

Qt kütüphanesinde çok tecrübem yok, ama bu size yardımcı olmuştur.

+0

Bu başarılı bir şekilde dönüştü, ancak test edildikten sonra '? \ X01? YJ? L? P3 &? \ X11 \ x1Bv /? X ?? c? U? ~ {? A ??' ve olması gerekir. ? \ u0001? YJ? l? p3 &? \ u0011 \ u001Bv /? X ?? c? U? ~ {? a ?? 'Neden değer değişiyor olabilir? qDebug() ve 'content' kullanmadan önce 'QByteArray' değeri doğru değerdir – James

+0

Mesajımı düzenledim ve eğer – James

+0

yardımcı oluyorsa tüm işlevimi ekledim Neden bunun nedeni downvot'lara sahip değil, mükemmel. – Zimano

1

deneyin kullanarak toLocal8Bit() .. o