MATLAB Mex:从MATLAB中的结构中检索逻辑

问题描述 投票:0回答:1

我有一个以这种方式创建的结构:

testStruct = struct; testStruct.tf = true

我想通过mex将这个结构传递给我的c ++代码,这是我所做的快照:

mxArray *mxValue; 
mxValue = mxGetField(prhs[0], 0, "tf");
mxLogical tf = mxGetLogicals(mxValue);
mexPrintf("tf: %i \n", tf);

无论我将testStruct.tf设置为true还是false,它都会打印tf: 1。我还使用if条件对其进行了测试,并且无论我放入什么逻辑,if条件都会被执行。

我试过bool tf = mxGetLogicals(mxValue),但这没用。

我能指点一下吗?

c matlab struct mex
1个回答
2
投票

我能指点一下吗?

......这就是问题... mxGetLogical将指针返回到mxArray中的第一个逻辑元素。 see documentation

所以试试这个(编译为mexTest):

#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{ 
  mxArray *mxValue; 
  mxLogical *tf;  
  mxValue = mxGetField(prhs[0], 0, "tf");
  tf = mxGetLogicals(mxValue);    
  mexPrintf("tf: %i \n", *tf);  
}

运行它给我这些结果:

>> testStruct.tf = true;
>> mexTest(testStruct)
tf: 1 
>> testStruct.tf = false;
>> mexTest(testStruct)
tf: 0 
© www.soinside.com 2019 - 2024. All rights reserved.