文档说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 OS)中读取。这段代码是否可行或者我必须使用QDataStream?
答案 0 :(得分:1)
QBuffer类为QByteArray提供QIODevice接口。
即它下面只有一个QByteArray
。另一方面,QByteArray
是可移植的,因为只要您将数据视为字节数组并且一次写入一个字节就可以了。您的代码将起作用:
当你说
时我希望在任何其他操作系统中读取此文件
您的文件是仅由您的程序使用还是由系统中的其他应用程序使用? QDataStream
为I\O
提供了更好的功能,您仍然可以利用它。
它将是特定于平台的。内存中的x
表示取决于endianess.It不会出现在QBuffer
中,但是当你这样做时:
b.write((char*)&x, sizeof(x));
如果您使用的是具有不同字节顺序的计算机,则可以通过
获取生成的数组的不同值char* data = &x;
qDebug()<< data[0];
qDebug()<< data[1];
qDebug()<< data[2];
qDebug()<< data[3];
的源代码
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;
}