Qt World Summit: Submit your Presentation

write to Qfile adds additional byte

  • I am programming a tool in Qt in which I want to write binary data into a file. Everything works fine except when I am trying to write the decimal value '10' (0000 1010 in binary) into the file. in this case I get an additional byte with the value '0000 1101' in front of the other byte. It doesn't matter how much data I write in the file, as soon as I write a 10 I get another byte.

    I broke it down to the following code:

    #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();
      QFile file(SavePath.toLocal8Bit().constData());
      if (file.exists())
      if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return -1;
      QDataStream out(&file);
      out << qint32(10);
      int test=10;
      out.writeRawData((char*)&test,4 );
      return 1;

    The output in my file is:

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

    the three 0x0d bytes are unwanted. I don't get them while writing a '9' or an '11' to the file. I am running out of ideas. Can anyone tell me what I am doing wrong?

  • Lifetime Qt Champion

    QDataStream handles byte order for you
    so i think it is adding info to allow this.
    You use other write methods, ( i think)

  • Hi,
    you should open a binary file without QIODevice::Text.

  • Hi mrjj,
    thanks for your answer!
    Yes I read about the possibility that QDataStream might add additional informations. Therefore in addition to the normal << operator I also tried the writeRawData funkction of QDataStream and the normal write function of QFile. I got the same results with all three ways.

  • Lifetime Qt Champion

    Ok, then something else is wrong.
    Maybe @m-sue answer will help.

  • Thanks m.sue,

    that solved it!
    I deleted the QIODevice::Text in the open function and everything is fine!

  • Lifetime Qt Champion

    ok so it was adding newline or something like that?

  • Yes, it add CR(0x0D) symbol to LF(0x0A) symbol in Windows.

    How do I mark this as solved? With the topic tool button I can only delete this topic.. Is that, because I am a newbie here?

  • Lifetime Qt Champion

    Nope, we loooove newbies here :)

    You must first select Ask as question and then it can be Solved.
    (yep its NOT clear )

    On first post in list.

Log in to reply