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

std::mbtowc

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

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

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

Содержание

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

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

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

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

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

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

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

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

#include <clocale>#include <cstdlib>#include <cstring>#include <iostream>   int print_mb(constchar* ptr){ std::mbtowc(nullptr, 0, 0);// сбросить состояние преобразованияconstchar* 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");// Узкая многобайтовая кодировка UTF-8constchar* str ="z\u00df\u6c34\U0001d10b";// или u8"zß水𝄋"// или "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; print_mb(str);}

Вывод:

zß水𝄋

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

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

(virtual protected std::codecvt функция-элемент)[править]
close