exponenta event banner

Функции обработки строк API матрицы C

Как MATLAB представляет строки в файлах MEX

В функциях C/C + + MEX, построенных с помощью C Matrix API, вектор символов MATLAB ® представляет собой mxArray типа mxChar, используя представление данных без языковых стандартов (кодировка Unicode ®). MATLAB представляет строки в стиле C как типcharи использует схему кодирования символов, заданную настройкой пользовательского языкового стандарта.

Следующие функции C Matrix API предоставляют функции обработки строк, помогающие работать как со строками mxArrays, так и со строками в стиле C.

  • mxCreateString - Создает mxChar mxArray инициализирован входной строкой.

  • mxArrayToString - Копирование mxChar mxArray в строку стиля C. Поддерживает многобайтовые кодированные символы.

  • mxGetString - Копирование mxChar mxArray в строку стиля C. Лучше всего использовать с однобайтовыми кодированными символами. Поддерживает многобайтовые кодированные символы при вычислении размера буфера строк.

  • mxGetChars - Возвращает указатель на первый mxChar элемент в массиве mxArray.

При выборе функции обработки строк следует учитывать следующие разделы.

Схемы кодирования символов и многобайтового кодирования

MATLAB поддерживает схему кодирования символов, заданную настройкой языкового стандарта пользователя. При преобразовании функции библиотеки MX mxChar данные в C char MATLAB также преобразует символ в пользовательскую кодировку по умолчанию.

При использовании многобайтовой схемы кодирования используйте mxArrayToString функция.

mxGetChars функция предоставляет указатель на mxChar массив; он не изменяет кодировку символов.

Вы также можете использовать mxGetString функция с многобайтовыми схемами кодирования. mxGetString преобразует mxChar данных в пользовательскую кодировку по умолчанию и копирует преобразованные символы в буфер назначения. Однако необходимо вычислить размер целевого буфера. Для однобайтовой кодировки размер буфера - это количество символов, плюс 1 для пустого терминатора. Для многобайтового кодирования размер символа равен одному или нескольким байтам. Некоторые варианты вычисления размера буфера состоят в том, чтобы переоценить сумму (вычисляя количество символов, умноженное на максимальное количество байтов, используемых схемой кодирования), проанализировать строку, чтобы определить точный размер, используемый каждым символом, или использовать библиотеки буфера строк сторонних производителей. После этого расчета добавить 1 для пустого терминатора.

Преобразование вектора символов MATLAB в строку стиля C

При передаче символьного массива функции MEX это mxArray типа mxChar. При вызове функции C для управления строкой сначала преобразуйте данные в тип C. char с использованием mxArrayToString или mxGetString функции.

Преобразование строки в стиле C в вектор символов MATLAB

Если файл MEX создает строку C и возвращает данные в MATLAB, используйте mxCreateString для копирования строки C в mxChar массив.

Возврат измененной входной строки

Предположим, что файл MEX принимает ввод символов, изменяет его и возвращает результат. Поскольку входные параметры файла MEX ( prhs массив) доступны только для чтения, необходимо определить отдельный выходной параметр для обработки измененной строки.

Управление памятью

MathWorks ® рекомендует, чтобы файловые функции MEX уничтожали их собственные временные массивы и освобождали их динамически выделяемую память. Функция, используемая для освобождения памяти, зависит от того, как используется строковый буфер и какая функция используется для создания буфера.

При вызове этой функции

Освободить память с помощью этой функции

Любая строковая функция, перечисленная здесь

Не уничтожайте mxArray в исходном файле MEX, когда он:

  • Передается в файл MEX в правом списке prhs[].

  • Возвращено в левом списке plhs[].

  • Возвращено системой mexGetVariablePtr функция.

  • Используется для создания структуры.

mxArrayToString

mxFree

mxGetString

При использовании mxCalloc / mxMalloc / mxRealloc для создания входного аргумента buf, звонок mxFree(buf).

mxCreateString

mxDestroyArray

mxGetChars

Ничего. Функция создает указатель на mxArray но не выделяет дополнительную память.

Связанные темы