Функции библиотеки 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 <stdio.h>
#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 <stdio.h>
#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;
}

Описание:

  1. Многобайтовый набор символов: В многобайтовом наборе символов (таком как UTF-8) символ может состоять из нескольких байтов, тогда как символ в наборе широких символов (таком как Unicode) обычно представляется однимwchar_tзначением типа (2 или 4 байта на некоторых платформах).

  2. Локаль:mbtowc()Его поведение зависит от текущей локали программы, особенно отLC_CTYPEнастройки, которая определяет, как интерпретируется многобайтовый набор символов. Поэтому при использовании этой функции обычно нужно использоватьsetlocale()Установите соответствующую локаль.

  3. Обработка ошибок: Если входная многобайтовая строка имеет недопустимый формат или не может быть преобразована в широкий символ,mbtowc()вернёт-1. Необходимо проверить возвращаемое значение, чтобы убедиться, что преобразование выполнено успешно.

Стандартная библиотека C - <stdlib.h>

Другие расширения