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