Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (Qt C+;+;)将QString作为二进制文件写入文件_C++_Qt_File Io_Binary_Hex - Fatal编程技术网

C++ (Qt C+;+;)将QString作为二进制文件写入文件

C++ (Qt C+;+;)将QString作为二进制文件写入文件,c++,qt,file-io,binary,hex,C++,Qt,File Io,Binary,Hex,我正在做一个项目,我需要将一个字符串(QString)写为二进制。字符串为十六进制格式,如“00010203040506070a0f01”等 我是通过YouTube上的一个教程了解到这一点的: void Output() { QString ye("01020a"); QFile file("C:\\Users\\Public\\Documents\\Qt_Projects\\myfile.dat"; if(!file.open(QIODevice::WriteOnly

我正在做一个项目,我需要将一个字符串(QString)写为二进制。字符串为十六进制格式,如“00010203040506070a0f01”等

我是通过YouTube上的一个教程了解到这一点的:

void Output()
{
    QString ye("01020a");
    QFile file("C:\\Users\\Public\\Documents\\Qt_Projects\\myfile.dat";

    if(!file.open(QIODevice::WriteOnly))
    {
        qDebug() << "Could not open file to be written";
        return;
    }

    QDataStream out(&file);
    out.setVersion(QDataStream::Qt_5_0);

    out << ye;

    file.flush();
    file.close();
   }

帮助?

您应该在写之前转换它

QByteArray array = QByteArray::fromHex(ye.toLatin1());
file.write(array);
您不需要使用
QDataStream
,因为您已经拥有
QByteArray
,并且可以直接编写它

您可以读取数据并将其转换回十六进制表示形式,如下所示:

QString s = file.readAll().toHex();

在QString中,每个字符占用2个字节(使用unicode)。 您可以参考ascii表以十六进制整数搜索字符的代码值:

'0': 0x30
'1': 0x31
'a': 0x61
因此,对于字符串
“01020a”
来说,其ascii码序列是:
00330030030061

“000c”:
我认为这是QString的类型标识


对不起,我的表达不好,希望有用。

将QString保存到QFile

QString qStr="abc";
qFile.write(qStr.toUtf8().constData());

conversion sequences are here;
   QString => QByteArray => const char* => QFile.write()
[参考类函数]

QByteArray QString::toUtf8() const;
const char * QByteArray::constData() const;
qint64 QIODevice::write(const char * data);

工作很有魅力:)Thx我需要等待4分钟才能接受只是想知道,我该如何将文件读取到QString?我假设这是一个变体,但我遗漏了什么?你的意思是把它转换回十六进制表示吗
QString s=file.readAll().toHex()也许,打印字符串的最简单方法是什么?我对qt很陌生。我搞砸了qDebug,但我不知道它在哪里显示它工作:)我提供了应用程序输出,一切都很完美!
QByteArray QString::toUtf8() const;
const char * QByteArray::constData() const;
qint64 QIODevice::write(const char * data);