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