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

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

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

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

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

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

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

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

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

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

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

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

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

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

Преобразование вектора символов 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 но не выделяет дополнительную память.

Похожие темы