Функции библиотеки C -mbtowc()
Стандартная библиотека C - <stdlib.h>
mbtowc()Это функция в стандартной библиотеке C, которая преобразует многобайтовый символ в широкий символ.
mbtowc()Объявление находится в<wchar.h>В заголовочном файле она в основном используется для поддержки преобразования между многобайтовыми наборами символов (такими как UTF-8) и широкими наборами символов (такими как Unicode).
mbtowc()Используется для преобразования многобайтового символа (mbstr) в широкий символ (wc). Эта функция основана на текущейLC_CTYPEЛокаль (параметры среды) определяет, как интерпретируются многобайтовые символы. Если многобайтовый символ допустим, он преобразуется в широкий символ. Если символ недопустим, функция возвращает-1。
Объявление
Ниже приведено объявление функции mbtowc().
#include <wchar.h> int mbtowc(wchar_t *wc, const char *mbstr, size_t n);
Параметры:
- wc: указывает на
wchar_tУказатель на переменную типа. Эта переменная получит преобразованный широкий символ. - mbstr: указатель на многобайтовую строку, которая представляет собой последовательность многобайтовых символов для преобразования.
- n: указывает
mbstrМаксимальное количество байтов в строке. Обычно его можно задать равным длине строки.
Возвращаемое значение
- В случае успеха,
mbtowc()Возвращает количество байтов, занимаемых преобразованным символом (т. е.mbstrколичество байтов многобайтового символа). ЕслиwcнеNULL, то значение больше 0. - Если возникает ошибка (например, недопустимый многобайтовый символ), функция возвращает
-1。 - Если достигнут конец последовательности символов (например, при обнаружении терминатора строки
\0), то возвращает0。
Пример
В следующем примере демонстрируется использование функции mbtowc().
Пример
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
int main()
{
// Установить информацию о локали программы
setlocale(LC_CTYPE, "");
// Многобайтовая строка
const char *str = "Here is example.com";
// Массив широких символов для хранения результата преобразования
wchar_t mb[100];
// Текущий индекс символа и длина преобразованных широких символов
int i = 0;
int len;
// Преобразовать каждый символ в широкий символ
while (*str) {
len = mbtowc(&mb[i], str, MB_CUR_MAX); // Преобразовать текущий многобайтовый символ
if (len > 0) {
str += len; // Перейти к началу следующего символа
i++; // Сохранить в массив широких символов
} else if (len == 0) {
break; // Обнаружен завершающий символ строки
} else {
// Обработка ошибок для недопустимого символа
printf("Invalid character\n");
break;
}
}
// Вывод преобразованной строки широких символов
wprintf(L"%ls \n", mb);
return 0;
}
Давайте скомпилируем и запустим вышеприведённую программу; она выдаст следующий результат, потому что ей нужно вывести результат в многобайтовой форме, что является двоичным выводом.
这里是 example.com
Пример
#include <wchar.h>
#include <locale.h>
int main() {
// Установить информацию о локали программы
setlocale(LC_CTYPE, "");
const char *mbstr = Hello;
wchar_t wc;
// Преобразование посимвольно
for (size_t i = 0; mbstr[i] != '\0'; i++) {
int len = mbtowc(&wc, &mbstr[i], 1);
if (len > 0) {
wprintf(L"Преобразованный широкий символ: %lc\n", wc);
i += len - 1; // Пропустить количество байтов текущего многобайтового символа
} else if (len == 0) {
break;
} else {
printf("Invalid character\n");
}
}
return 0;
}
Описание:
Многобайтовый набор символов: В многобайтовом наборе символов (таком как UTF-8) символ может состоять из нескольких байтов, тогда как символ в наборе широких символов (таком как Unicode) обычно представляется одним
wchar_tзначением типа (2 или 4 байта на некоторых платформах).Локаль:
mbtowc()Его поведение зависит от текущей локали программы, особенно отLC_CTYPEнастройки, которая определяет, как интерпретируется многобайтовый набор символов. Поэтому при использовании этой функции обычно нужно использоватьsetlocale()Установите соответствующую локаль.Обработка ошибок: Если входная многобайтовая строка имеет недопустимый формат или не может быть преобразована в широкий символ,
mbtowc()вернёт-1. Необходимо проверить возвращаемое значение, чтобы убедиться, что преобразование выполнено успешно.