std::mbrlen
Материал из cppreference.com
Определено в заголовочном файле <cwchar>
|
||
std::size_t mbrlen( const char* 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-8 std::setlocale(LC_ALL, "en_US.utf8"); // узкая многобайтовая кодировка UTF-8 std::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
|