在QT中编写二进制文件并在matlab中读取

时间:2012-06-20 11:31:00

标签: qt matlab file-io binary binaryfiles

尝试做最简单的事情。在QT中以二进制模式(无符号16)写入一个数字,并在matlab中读取该文件。我使用追加模式,因为我将来会在文件中添加数字但是似乎无法做到这一点。

这是QT代码:

QFile f("C:\\temp.dat");
f.open(QIODevice::WriteOnly | QIODevice::Append)
QDataStream out(&f);
out<<quint16(270);
f.close();

这是Matlab代码:

fid = fopen('C:\\temp.dat');
F_nums = fread(fid,1,'*uint16');
fclose(fid);

看起来非常简单,但它错误地读取数字......

谢谢!

2 个答案:

答案 0 :(得分:2)

问题非常简单:你正在编写大端数据(MSB排在第一位),但默认情况下Matlab需要很少的endian数据。修复很简单:

QFile f("C:\\temp.dat");
f.open(QIODevice::WriteOnly | QIODevice::Append)
QDataStream out(&f);
out.setByteOrder(QDataStream::LittleEndian); // *** set little endian byte order
out<<quint16(270);
f.close();

答案 1 :(得分:1)

QDataStream并不意味着创建可跨不同应用程序移植的流。 (它可以在不同的操作系统和Qt版本之间移植,但总是由Qt使用。)格式不保证是稳定的,因此它可以在今天工作但明天就可以使用。来自文档:

  

QDataStream的二进制格式自Qt 1.0以来已经发展,很可能   继续发展以反映Qt中所做的变化。输入或时   输出复杂的类型,确保它是非常重要的   相同版本的流(version())用于阅读和   写入。

如果要共享数据,请使用用于共享的输出格式,如XML,Json,或者在这种情况下,只需将数字写为ANSI字符串即可。只需将QTextStream替换为QDataStream

相关问题