Qt C++ QString 到 QByteArray 的转换
Qt C++ QString to QByteArray Conversion
我创建了一个 encrypt/decrypt 程序,在加密时我将加密的 QByteArray 存储在一个文本文件中。
当我尝试解密时,我检索了它,然后将其放入解密方法中,问题是我需要一种方法将其转换为 QByteArray 而不更改格式,否则它不会正确解密。我的意思是,如果文件给了我一个加密值 1234,并且我通过 1234.toLatin1()
将其转换为 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;
如果我没理解错的话,文件中的文本存储在 QString 内容中。我想你可以创建一个新的 QByteArray。因为 QByteArray 的构造函数不允许 QString 作为输入,所以我可能不得不将 QString 附加到空的 QByteArray。
//After if:
QByteArray tempContent();
tempContent.append(content);
QByteArray decrypted = crypto.Decrypt(tempContent, key);
我在 Qt 库方面经验不多,但希望对您有所帮助。
我猜你应该使用:
QString::fromUtf8(const QByteArray &str)
或者:
QString::QString(const QByteArray &ba)
将QByteArray转换为QString,然后通过QTextStream写入文件。
之后,通过QTextStream读取文件,使用:
QString::toUtf8()
将 QString 转换为 QByteArray。
QString::QString(const QByteArray &ba)
Constructs a string initialized with the byte array ba. The given byte array is converted to Unicode using fromUtf8().
P.S:
也许使用 QFile::write 和 QFile::read 是更好的方法。
尝试使用 toUtf8() ..对我来说效果很好
或者直接使用 b64 = data.toUtf8().toBase64();
首先用toUtf8()
将其转换为QByteArray,然后立即将其转换为toBase64()
有一个简单的方法:
QByteArray ba;
QString qs = "String";
ba += qs;
更难的方法:
QByteArray ba;
QDataStream in(&ba, QIODevice::WriteOnly);
in << QString("String");
极端方式,给想用QBuffer的人:
#include <QDebug>
#include <QBuffer>
#include <QDataStream>
#include <QIODevice>
#include <QByteArray>
#include <QString>
#include <qcoreapplication.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::ReadWrite);
QDataStream in( &buffer );
in << QString("String");
buffer.close();
for (int i = 0; i < byteArray.length(); ++i) {
printf("%c - %x\n", byteArray.at(i), byteArray.at(i));
}
printf("\n");
return a.exec();
}
谁运行最后的代码可以问我null byte是从哪里来的?
QDataStream
将 QString
序列化为小端。读取 4 个字节以创建 32 位长度值,后跟 UTF-16 格式的字符串本身。此字符串在 UTF-16 中的长度为 12 个字节,因此 QByteArray
中的前三个字节将为零。
读QByteArray
中的qDebug ()
经常出问题录音没问题。
不要忘记删除 .pro
文件中的 QT_NO_CAST_FROM_BYTEARRAY
,如果它有
我创建了一个 encrypt/decrypt 程序,在加密时我将加密的 QByteArray 存储在一个文本文件中。
当我尝试解密时,我检索了它,然后将其放入解密方法中,问题是我需要一种方法将其转换为 QByteArray 而不更改格式,否则它不会正确解密。我的意思是,如果文件给了我一个加密值 1234,并且我通过 1234.toLatin1()
将其转换为 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;
如果我没理解错的话,文件中的文本存储在 QString 内容中。我想你可以创建一个新的 QByteArray。因为 QByteArray 的构造函数不允许 QString 作为输入,所以我可能不得不将 QString 附加到空的 QByteArray。
//After if:
QByteArray tempContent();
tempContent.append(content);
QByteArray decrypted = crypto.Decrypt(tempContent, key);
我在 Qt 库方面经验不多,但希望对您有所帮助。
我猜你应该使用:
QString::fromUtf8(const QByteArray &str)
或者:
QString::QString(const QByteArray &ba)
将QByteArray转换为QString,然后通过QTextStream写入文件。
之后,通过QTextStream读取文件,使用:
QString::toUtf8()
将 QString 转换为 QByteArray。
QString::QString(const QByteArray &ba)
Constructs a string initialized with the byte array ba. The given byte array is converted to Unicode using fromUtf8().
P.S:
也许使用 QFile::write 和 QFile::read 是更好的方法。
尝试使用 toUtf8() ..对我来说效果很好
或者直接使用 b64 = data.toUtf8().toBase64();
首先用toUtf8()
将其转换为QByteArray,然后立即将其转换为toBase64()
有一个简单的方法:
QByteArray ba;
QString qs = "String";
ba += qs;
更难的方法:
QByteArray ba;
QDataStream in(&ba, QIODevice::WriteOnly);
in << QString("String");
极端方式,给想用QBuffer的人:
#include <QDebug>
#include <QBuffer>
#include <QDataStream>
#include <QIODevice>
#include <QByteArray>
#include <QString>
#include <qcoreapplication.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::ReadWrite);
QDataStream in( &buffer );
in << QString("String");
buffer.close();
for (int i = 0; i < byteArray.length(); ++i) {
printf("%c - %x\n", byteArray.at(i), byteArray.at(i));
}
printf("\n");
return a.exec();
}
谁运行最后的代码可以问我null byte是从哪里来的?
QDataStream
将 QString
序列化为小端。读取 4 个字节以创建 32 位长度值,后跟 UTF-16 格式的字符串本身。此字符串在 UTF-16 中的长度为 12 个字节,因此 QByteArray
中的前三个字节将为零。
读QByteArray
中的qDebug ()
经常出问题录音没问题。
不要忘记删除 .pro
文件中的 QT_NO_CAST_FROM_BYTEARRAY
,如果它有