如何在C ++和MATLAB之间交换数据?

时间:2012-08-27 16:37:46

标签: c++ 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');

当数值数据是输出时,这种方法可以很好地工作;但是,如果输出是具有许多成员变量的类,则可能会失败。我想知道是否有更好的方法来完成这项工作,不仅是简单的数字数据,还有复杂的数据结构。谢谢!

2 个答案:

答案 0 :(得分:1)

我建议使用MATLAB引擎,通过它可以实时地将数据传递给MATLAB,甚至可以使用MATLAB中提供的各种图形绘图工具来显示数据。

您所要做的就是从C / C ++程序调用MATLAB引擎,然后您可以直接从C / C ++程序轻松执行MATLAB命令和/或在MATLAB和C / C ++之间交换数据。它可以在两个方向上完成,即从C ++到MATLAB,反之亦然。

您可以查看与here所示相同的工作示例。

答案 1 :(得分:0)

我建议在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++中创建一个以确定的方式打包数据的类方法。

达斯汀