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

std::mbrlen

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
Определено в заголовочном файле <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 функция-элемент)[править]
close