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
Qt 将00001010写入Qfile会在前面添加另一个字节_Qt_Qfile_Qdatastream - Fatal编程技术网

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

Qt 将00001010写入Qfile会在前面添加另一个字节,qt,qfile,qdatastream,Qt,Qfile,Qdatastream,我正在用Qt编写一个工具,我想在其中将二进制数据写入一个文件。除了我试图将十进制值“10”(二进制形式的0000 1010)写入文件时,其他一切都正常工作。在本例中,我得到一个额外的字节,其值“0000 1101”位于另一个字节的前面。无论我在文件中写入多少数据,只要我写入10,就会得到另一个字节 我将其分解为以下代码: #include <QCoreApplication> #include <QFile> #include <iostream> #incl

我正在用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;
}

三个0x0d字节是不需要的。在文件中写入“9”或“11”时,我无法获取它们。我的想法快用完了。谁能告诉我我做错了什么吗?

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

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

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


通过在open函数中添加QIODevice::Text标志,我使其成为一个文本文件。删除此项后,一切正常。

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


通过在open函数中添加QIODevice::Text标志,我使其成为一个文本文件。删除此项后,一切正常。

您调用的重载需要一个以null结尾的字符数组。您的代码将显示未定义的行为。谢谢您的回答!您调用的重载需要以null结尾的字符数组。您的代码将显示未定义的行为。谢谢您的回答!我试图理解你的想法:你大概有意识地将
文本
标志添加到二进制文件中…:)我试图理解你的想法:你大概有意识地将
文本
标志添加到二进制文件中…:)
0d 0a 00 00 00 0d 0a 00 00 00 0d 0a