[英]How to exchange data between C++ and MATLAB?
对于现在我正在开发基于一些MATLAB代码的C ++程序。 在开发期间,我需要将中间结果输出到MATLAB,以便将C ++实现结果与MATLAB结果进行比较。 我现在正在做的是用C ++编写二进制文件,然后用MATLAB加载二进制文件。 以下代码显示了一个示例:
int main ()
{
ofstream abcdef;
abcdef.open("C:/test.bin",ios::out | ios::trunc | ios::binary);
for (int i=0; i<10; i++)
{
float x_cord;
x_cord = i*1.38;
float y_cord;
y_cord = i*10;
abcdef<<x_cord<<" "<<y_cord<<endl;
}
abcdef.close();
return 0;
}
当我有文件test.bin时,我可以使用MATLAB命令自动加载文件:
data = load('test.bin');
当数值数据是输出时,这种方法可以很好地工作; 但是,如果输出是具有许多成员变量的类,则可能会失败。 我想知道是否有更好的方法来完成这项工作,不仅是简单的数字数据,还有复杂的数据结构。 谢谢!
我建议使用MATLAB引擎,通过它可以实时地将数据传递给MATLAB,甚至可以使用MATLAB中提供的各种图形绘图工具来可视化数据。
您所要做的就是从C / C ++程序调用MATLAB引擎,然后您可以直接从C / C ++程序轻松执行MATLAB命令和/或在MATLAB和C / C ++之间交换数据。 它可以在两个方向上完成,即从C ++到MATLAB,反之亦然。
您可以查看与此处所示相同的工作示例。
我建议在matlab
使用fread命令。 我这样做是为了在matlab
和其他程序之间交换数据,例如:
fd = fopen('datafile.bin','r');
a = fread(fd,3,'*uint32');
b = fread(fd,1,'float32');
通过fread
您可以灵活地读取任何类型的数据。 通过在名称中放置*
,如上所述,您还可以说要存储到该数据类型而不是默认的matlab
数据类型。 所以第一个读取3 32 bit
无符号整数并将它们存储为整数。 第二个读取单个精度浮点数,但将其存储为默认的双精度。
您需要控制在c++
代码中写入数据的方式,但这是不可避免的。 您可以在c++
中创建一个以确定的方式打包数据的类方法。
达斯汀
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.