C матричные функции обработки строки API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если вы вызываете эту функцию

Выпустите память Используя эту функцию

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

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

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

  • Возвращенный в левой стороне перечисляют plhs[].

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

  • Используемый, чтобы создать структуру.

mxArrayToString

mxFree

mxGetString

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

mxCreateString

mxDestroyArray

mxGetChars

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

Похожие темы