将00001010写入Qfile会在前面添加另一个字节

时间:2016-11-22 12:36:14

标签: qt qfile qdatastream

我正在编写Qt中的一个工具,我想在其中将二进制数据写入文件。一切正常,除非我试图写小数值' 10' (0000 1010二进制)进入文件。在这种情况下,我得到一个额外的字节值为' 0000 1101'在另一个字节前面。在文件中写入多少数据并不重要,只要我写一个10我得到另一个字节。

我将其分解为以下代码:

#include <QCoreApplication>
#include <QFile>
#include <iostream>
#include <QString>
#include <QDataStream>

int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);

 QString SavePath;
 SavePath = qApp->applicationDirPath();
 SavePath.append("/test.bin");

 QFile file(SavePath.toLocal8Bit().constData());
 if (file.exists())
     file.remove();
 if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
 {
    std::cout << "Kann Datei zum Speichern der TP-Daten nicht erstellen." << std::endl;
    std::cout << SavePath.toLocal8Bit().constData() << std::endl;
    return -1;
 }


 QDataStream out(&file);
 out.setVersion(QDataStream::Qt_4_3);
 out.setByteOrder(QDataStream::LittleEndian);
 out << qint32(10);

 int test=10;
 out.writeRawData((char*)&test,4 );

 file.write((char*)&test);

 return 1;
}

我文件中的输出是:

0d 0a 00 00 00 0d 0a 00 00 00 0d 0a

三个0x0d字节是不需要的。在写一个&#39; 9&#39;时,我不会得到它们。或者&#39; 11&#39;到文件。我的想法已经不多了。谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果你想要二进制文件,删除QIODevice :: Text标志,dude。 否则,它将CR(0x0D)符号添加到Windows中的LF(0x0A)符号。

答案 1 :(得分:0)

刚刚解决了Qt论坛中的问题:

通过在open函数中添加QIODevice :: Text Flag,我将其作为文本文件。删除后,一切正常。