Запись 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" в файл. У меня заканчиваются идеи. Может кто-нибудь сказать мне, что я делаю не так?

2 ответа

Решение

Если вы хотите двоичный файл, удалите флаг QIODevice::Text, чувак. В противном случае он добавляет символ CR(0x0D) к символу LF(0x0A) в Windows.

Только что решил проблему в Qt Forum:

добавив флаг QIODevice::Text в функцию open, я сделал его текстовым файлом. После удаления все работает нормально.

Другие вопросы по тегам