Пространства имён
Варианты
Действия

std::mbtowc

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
Определено в заголовочном файле <cstdlib>
int mbtowc( wchar_t* pwc, const char* s, std::size_t n );

Преобразовывает мультибайтовый символ, на первый байт которого указывает s, в широкий символ, который записывается в *pwc, если pwc не равен нулевому указателю.

Если s равен нулевому указателю, то тогда сбрасывается глобальное состояние преобразования и определяется используется сдвиг регистра или нет.

Содержание

[править] Параметры

s - Указатель на мультибайтовый символ
n - Максимальное количество байт на один символ
pwc - Указатель на широкий символ для вывода результата

[править] Возвращаемое значение

Если s не равен нулевому указателю, то возвращается количество байтов, которое содержал мультибайтовый символ, -1, если первый байт, на который указывал s, не является корректным мультибайтовым символом или 0, если s указывал на нулевой символ '\0'.

Если s равен нулевому указателю, то сбрасывается внутреннее состояние преобразования, чтобы вернуть первоначальное состояние сдвига регистра и возвращает 0, если текущая многобайтовая кодировка не является зависимой от состояния регистра (не использует последовательность сдвига регистра) или ненулевое значение, если она зависит от этого состояния (использует сдвиг регистра).

[править] Примечание

Каждый вызов mbtowc обновляет глобальное внутреннее состояние преобразования (в статическом объекте типа std::mbstate_t, известного только этой функции). Если многобайтовая кодировка использует сдвиг регистра необходимо соблюдать осторожность, чтобы не допустить возвратов или повторного сканирования. В любом случае, из нескольких поток не следует запускать mbtowc без синхронизации: в противном случае можно воспользоваться std::mbrtowc.

[править] Пример

#include <iostream>
#include <clocale>
#include <cstring>
#include <cstdlib>
 
int print_mb(const char* ptr)
{
    std::mbtowc(NULL, 0, 0); // Сбрасываем глобальное состояние
    const char* end = ptr + std::strlen(ptr);
    int ret;
    for (wchar_t wc; (ret = std::mbtowc(&wc, ptr, end-ptr)) > 0; ptr+=ret) {
        std::wcout << wc;
    }
    std::wcout << '\n';
    return ret;
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // Кодируем строку в многобайтовый UTF8
    const char* str = u8"z\u00df\u6c34\U0001d10b"; // или u8"zß水𝄋"
                      // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
    print_mb(str);
}

Вывод:

zß水𝄋

[править] См. также

преобразует следующий символ многобайтовых широкого характера, данное состояние
Оригинал:
converts the next multibyte character to wide character, given state
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
Возвращает количество байтов в заданном мультибайтовом символ
(функция) [править]
[virtual]
преобразует строку из externT в internT, например, при чтении из файла
Оригинал:
converts a string from externT to internT, such as when reading from file
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(virtual protected std::codecvt функция-член) [править]
C documentation for mbtowc