尝试做最简单的事情。在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);
看起来非常简单,但它错误地读取数字......
谢谢!
答案 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
。