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



我正在编程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字节是不需要的。在文件上写" 9"或" 11"时,我不会得到它们。我用尽了想法。谁能告诉我我做错了什么?

如果要二进制文件,请删除qiodevice :: text flag,dude。否则,它将CR(0x0D)符号添加到Windows中的LF(0x0a)符号。

刚刚在QT论坛中解决了问题:

通过在打开函数中添加Qiodevice ::文本标志,我将其制成了文本文件。删除此之后,一切正常。

相关内容

  • 没有找到相关文章

最新更新