2013-05-28 1 views
2

Я хочу передать целочисленный массив из MATLAB в C. Я пробовал использовать тип uint64_T, но он продолжает сбой. Получение двойного указателя, использующего mxGetPr(), отлично работает, но мне нужно придумать содержимое в целое число и сделать это на каждой итерации может быть медленным.с использованием целочисленных массивов на mex

Я попытался это в mexFunction:

uint64_T *l; 
l= (uint64_T *)mxGetData(prhs[1]); 

Функция вызова этой переменной имеет такой вид:

void XAction(const double *v, const uint64_T *l, double *w) 
{ 
for (j=c; j; j--) 
    for (i=r-1; i; i--) 
     w[i] =v[l[r*j +i]] 
} 

Могу ли я сделать ошибку в типажей?

Я видел этот ответ: how to read an integer array in MEX-function, но я не смог добиться прогресса.

+0

Чтобы сделать вопрос более точным, 'L = (двойной *) mxGetData (prhs [1])' работает, но 'л = (ИНТ *) mxGetData (prhs [1]) 'не делает. Во втором случае указатель содержит значения нежелательных сообщений. – user2426897

+0

все эти однобуквенные имена переменных затрудняют чтение вашего кода. Откуда взялось c? р? Каковы ваши входы? –

ответ

2

Чтобы корректно работать, данные, переданные с MATLAB на ваш mex, уже должны иметь тип uint64. Убедитесь, что вы передаете массив uint64 из MATLAB в ваш файл mex. Если вы вызываете myMex([1 2 3]), то переданный массив не является целым числом. Он двойной.

Вы не можете преобразовать двойной массив в массив int, указав указатель. Либо вам нужно передать целочисленные значения из MATLAB, либо вам нужно создать новый массив int и заполнить его в цикле, добавив каждое значение по отдельности. Для преобразования значений uint64 в MATLAB, вы можете сделать myMex(uint64([1 2 3]))

+0

Спасибо! Я не преобразовывал массив в MATLAB. – user2426897

Смежные вопросы