В файлах MEX C/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
для пустого терминатора строки.
Когда вы передаете символьный массив MEX-функции, это - mxArray
типа mxChar
. Если вы вызываете функцию C, чтобы управлять строкой, сначала преобразовать данные в тип C char
с помощью функций mxGetString
или mxArrayToString
.
Если ваш файл MEX создает струну до и возвращает данные в MATLAB, используйте функцию mxCreateString
, чтобы скопировать струну до в массив mxChar
.
Предположим, что ваш файл MEX берет символьный вход, изменяет его и возвращает результат. Поскольку файл MEX ввел параметры (массив prhs
) только для чтения, необходимо задать отдельный выходной параметр, чтобы обработать измененную строку.
MathWorks® рекомендует, чтобы функции файла MEX уничтожили свои собственные временные массивы и освободили их собственную динамически выделенную память. Функция, которую вы используете, чтобы выпустить память, зависит от того, как вы используете буфер строки и что функционирует, вы используете, чтобы создать буфер.
Если вы вызываете эту функцию | Выпустите память Используя эту функцию |
---|---|
Любая строковая функция перечислена здесь | Не уничтожайте
|
|
|
| При использовании |
|
|
| 'none'. Функция создает указатель на |