将 00001010 写入 Qfile 会在前面添加另一个 Byte
writing 00001010 to Qfile adds another Byte in front
我正在用 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 标志,伙计。
否则它将 CR(0x0D) 符号添加到 Windows.
中的 LF(0x0A) 符号
刚在Qt论坛解决问题:
通过在打开函数中添加 QIODevice::Text 标志,我将其设为文本文件。删除后一切正常。
我正在用 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 标志,伙计。 否则它将 CR(0x0D) 符号添加到 Windows.
中的 LF(0x0A) 符号刚在Qt论坛解决问题:
通过在打开函数中添加 QIODevice::Text 标志,我将其设为文本文件。删除后一切正常。