繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM