c - 我们如何将结构从 C 代码传递到 Matlab 代码

标签 c matlab structure

假设一个C程序有一个实例化如下的结构:

b.param1 = 20;
b.parm2 = 42;
b.param3 = 30;

问题是,我们需要做什么或者必须能够从 Matlab 中编写

>> b = [bInC.param1; bInC.param2; bInC.param3];

其中bInC指向上述C程序分配的内存

最佳答案

根据您的情况,您有多种选择。

1) 如果您的 C 代码的结构可以从 matlab 调用,您可以将 C 代码编译为 mex 文件。然后您将从 matlab 调用您的 C 函数并返回您的结果。要返回您的结构,您必须在 C 代码中创建一个 matlab 数组并将结构参数复制到其中。这个接口(interface)是 mxArray。这不是最方便的过程,但效果很好。

mex 文件和 mxArray:http://www.mathworks.com/help/techdoc/matlab_external/f29502.html

2) 使用 matlab 引擎将您的值加载到 matlab 中,而无需将您的代码编译成 mex。该引擎将允许您从 C 程序执行 matlab 命令。您还可以将变量加载到工作区中。您仍然必须创建一个包含要复制的值的 mxArray。然后,您可以使用 engPutVariable 函数将 mxArray 复制到您的 matlab 工作区中。

请注意,引擎维护自己的工作空间,默认情况下它不会自动将变量复制到当前 matlab session 的工作空间中。有在工作区之间移动变量的命令,但我没有对此进行调查。我发现将变量保存到 mat 文件并将其加载到主工作区会更快,但如果您需要自动化方法,这并不理想。

matlab 引擎:http://www.mathworks.com/help/techdoc/matlab_external/f29148.html

关于c - 我们如何将结构从 C 代码传递到 Matlab 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6817306/

相关文章:

c - 将 sendfile() 与 SSL 结合使用时出现问题

c - 为什么 fgetpos() 返回负偏移量?

c - 是否可以在 C 中使用事件总线?

matlab - HaarTraining - MATLAB 还是 OpenCV?

c++ - 在 C++ 中使用循环创建顺序变量名称

c - 为什么这个程序不允许我在需要时输入信息?

c - 如何检查 Double 中的浮点精度

matlab - Matlab 条形图中的图例

Java依赖管理

c - 结构中 char 数组中的奇怪字符