Qt QBuffer是否以系统相关字节顺序写入数据?
文档中说QDataStream以独立于系统的方式写入数据,但它没有提到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
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;
}