[Interest] "QDataStream::version()" -- safe to assume 8-bit?

Charley Bay charleyb123 at gmail.com
Sun Oct 27 01:44:11 CEST 2013


The QDataStream docs give examples on serializing for compatible
formats across versions defined by QDataStream:

<http://doc-snapshot.qt-project.org/qdoc/qdatastream.html#setVersion>

Other examples on the web are similar, like:

<http://doc.qt.digia.com/qq/qq05-achtung.html>

The recommendation is something like:

  //---------------
  //...
  QDataStream out(&file);

  // Write a header with a "magic number" and a version
  out << (quint32)0xA0B0C0D0;
  out << (qint32)123;
  //---------------

Then, reading in is:

  //---------------
  //...-
  QDataStream in(&file);

  // Read and check the header
  quint32 magic;
  in >> magic;
  if (magic != 0xA0B0C0D0)
    return XXX_BAD_FILE_FORMAT;

  // Read the version
  qint32 version;
  in >> version;
  //---------------

QUESTION #1:  Is it safe to write the 32-bit magic-number before
reading-and-setting the "QDataStream::version()" ?  It seems like
these examples are not cross-platform, as the 32-bit value may have
varying formats on different platforms.

Other reading suggests that it is "safe" to assume
"QDataStream::version()" wholly fits into an 8-bit value, so this
should not be a problem with that value.

QUESTION #2:  Is it forever safe to assume an 8-bit value is
sufficient to store "QDataStream::version()"?

Because of my concern regarding "#1", it seems like four
"magic-quint8" values should be serialized instead of one
"magic-quint32" value.

Or, am I just paranoid?

--charley

P.S.:   I'll close with the quote from the Digia page above because I
found it funny:

"We have two choices, either to attack I/O now and get it over with,
or to postpone I/O until near the end.

Neither prospect is very attractive."
  -- Donald E. Knuth



More information about the Interest mailing list