Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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 QBuffer是否以系统相关字节顺序写入数据?_Qt - Fatal编程技术网

Qt QBuffer是否以系统相关字节顺序写入数据?

Qt QBuffer是否以系统相关字节顺序写入数据?,qt,Qt,文档中说QDataStream以独立于系统的方式写入数据,但它没有提到QBuffer。我开发了一个程序,将数据保存在如下文件中: QByteArray a; QBuffer b(&a); b.open(QIODevide::WriteOnly); quint32 x = 1; b.write((char*)&x, sizeof(x)); b.close(); QFile f(...); f.open(QIODevide::WriteOnly); f.write(a.constDa

文档中说QDataStream以独立于系统的方式写入数据,但它没有提到QBuffer。我开发了一个程序,将数据保存在如下文件中:

QByteArray a;
QBuffer b(&a);
b.open(QIODevide::WriteOnly);
quint32 x = 1;
b.write((char*)&x, sizeof(x));
b.close();
QFile f(...);
f.open(QIODevide::WriteOnly);
f.write(a.constData(), a.size());
f.close();
,我希望此文件可以在任何其他操作系统(win、linux、Mac操作系统)中读取。这段代码有效吗?还是我必须改用QDataStream?

说明:

QBuffer类为QByteArray提供QIODevice接口

即它下面只是一个
QByteArray
。另一方面,
QByteArray
是可移植的,因为只要您将数据视为字节数组,并一次写入一个字节,就可以了。您的代码将工作:

当你说

我想在任何其他操作系统中读取此文件

您的文件是仅由您的程序使用还是将由系统中的其他应用程序使用
QDataStream
I\O
提供了更好的功能,您仍然可以利用它


它将是特定于平台的
x
在内存中的表示取决于尾数。它不会出现在
QBuffer
中,但当您这样做时:

b.write((char*)&x, sizeof(x));
如果您在不同Endianness的计算机上,您将通过执行以下操作获得结果数组的不同值

char* data = &x;
qDebug()<< data[0];
qDebug()<< data[1];
qDebug()<< data[2];
qDebug()<< data[3];
char*data=&x;

qDebug()实际上我一次只写几个字节,就像示例中的int32一样。所以我想知道32位变量是否会以特定于平台的字节顺序写入?谢谢,这就是我想知道的
QDataStream &QDataStream::operator<<(qint32 i){

  CHECK_STREAM_WRITE_PRECOND(*this)
  if (!noswap) {
      i = qbswap(i);
  }
   if (dev->write((char *)&i, sizeof(qint32)) != sizeof(qint32))
       q_status = WriteFailed;
   return *this;
}