std::mbrlen
Материал из cppreference.com
Определено в заголовочном файле <cwchar> | ||
std::size_t mbrlen(constchar* s, std::size_t n, std::mbstate_t* ps); | ||
Определяет размер в байтах оставшейся части многобайтового символа, на первый байт которого указывает s, с учётом текущего состояния преобразования ps.
Эта функция эквивалентна вызову std::mbrtowc(nullptr, s, n, ps ? ps :&internal) для некоторого скрытого объекта internal
типа std::mbstate_t, за исключением того, что выражение ps вычисляется только один раз.
Содержание |
[править]Параметры
s | — | указатель на элемент строки многобайтовых символов |
n | — | ограничение на количество байтов в s, которые могут быть проверены |
ps | — | указатель на переменную, содержащую состояние преобразования |
[править]Возвращаемое значение
0, если следующие n или меньшее количество байтов завершают нулевой символ.
Количество байтов (между 1 и n), завершающих допустимый многобайтовый символ.
(size_t)-1, если произошла ошибка кодирования.
(size_t)-2, если следующие n байтов являются частью возможно допустимого многобайтового символа, который все ещё является неполным после проверки всех байтов n.
[править]Пример
Запустить этот код
#include <clocale>#include <cwchar>#include <iostream>#include <string> int main(){// разрешить mbrlen() работать с многобайтовой кодировкой UTF-8std::setlocale(LC_ALL, "en_US.utf8");// узкая многобайтовая кодировка UTF-8std::string str ="水";// или u8"\u6c34" или "\xe6\xb0\xb4"std::mbstate_t mb =std::mbstate_t();int len1 = std::mbrlen(&str[0], 1, &mb);if(len1 ==-2)std::cout<<"Первый 1 байт "<< str <<" представляет собой неполный многобайтовый символ (mbrlen возвращает -2)\n";int len2 = std::mbrlen(&str[1], str.size()-1, &mb);std::cout<<"Остальные "<< str.size()-1<<" байта "<< str <<" хранят "<< len2 <<" байтов многобайтового символа\n";std::cout<<"Попытка вызвать mbrlen() в середине "<< str <<", в то время как в исходном состоянии сдвига возвращается "<<(int)mbrlen(&str[1], str.size(), &mb)<<'\n'; }
Вывод:
Первый 1 байт 水 представляет собой неполный многобайтовый символ (mbrlen возвращает -2) Остальные 2 байта 水 хранят 2 байтов многобайтового символа Попытка вызвать mbrlen() в середине 水 , в то время как в исходном состоянии сдвига возвращается -1
[править]Смотрите также
преобразует следующий многобайтовый символ в широкий символ при заданном состоянии (функция) | |
возвращает количество байтов в следующем мультибайтовом символе (функция) | |
[virtual] | вычисляет длину externT строку, которая будет потребляться преобразования в данной internT буфера Оригинал: calculates the length of the externT string that would be consumed by conversion into given internT buffer Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент) |
Документация C по mbrlen |