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

std::mbrlen

Материал из cppreference.com
< cpp‎ | string‎ | multibyte

Определено в заголовочном файле <cwchar>
std::size_t mbrlen( const char* s, std::size_t n, std::mbstate_t* ps);
Определяет размер, в байтах, оставшаяся часть многобайтовых символов, первый байт, на который указывает s, учитывая нынешнее состояние преобразования ps.
Оригинал:
Determines the size, in bytes, of the remainder of the multibyte character whose first byte is pointed to by s, given the current conversion state ps.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Эта функция эквивалентна на призыв std::mbrtowc(nullptr, s, n, ps?ps:&internal) для некоторых скрытых internal объект типа std::mbstate_t, за исключением того, что выражение ps вычисляется только один раз.
Оригинал:
This function is equivalent to the call std::mbrtowc(nullptr, s, n, ps?ps:&internal) for some hidden object internal of type std::mbstate_t, except that the expression ps is evaluated only once.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

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

s -
Указатель на элемент многобайтовую строку символов
Оригинал:
pointer to an element of a multibyte character string
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
n -
ограничение на количество байт в сек, которые могут быть рассмотрены
Оригинал:
limit on the number of bytes in s that can be examined
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ps -
Указатель на переменную, преобразование государства
Оригинал:
pointer to the variable holding the conversion state
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

0, если следующая n или меньшее количество байтов завершить нулевой символ.
Оригинал:
0 if the next n or fewer bytes complete the null character.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Количество байт (между 1 и n), которые завершают действительный характер многобайтовых
Оригинал:
The number of bytes (between 1 and n) that complete a valid multibyte character
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
(size_t)-1 если кодирование ошибки
Оригинал:
(size_t)-1 if encoding error occurs
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
(size_t)-2 если следующий байт n являются частью возможно действительно многобайтовых символов, который еще не завершен после изучения всех n байт
Оригинал:
(size_t)-2 if the next n bytes are part of a possibly valid multibyte character, which is still incomplete after examining all n bytes
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

#include <clocale>
#include <string>
#include <iostream>
#include <cwchar>
 
int main()
{
    // allow mbrlen() to work with UTF-8 multibyte encoding
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    std::string str = u8"水"; // or u8"\u6c34" or "\xe6\xb0\xb4"
    std::mbstate_t mb = std::mbstate_t();
    int len1 = std::mbrlen(&str[0], 1, &mb);
    if(len1 == -2) {
        std::cout << "The first 1 byte of " << str
                  << " is an incomplete multibyte char (mbrlen returns -2)\n";
    }
    int len2 = std::mbrlen(&str[1], str.size()-1, &mb);
    std::cout << "The remaining " << str.size()-1 << " bytes of " << str
              << " hold " << len2 << " bytes of the multibyte character\n";
    std::cout << "Attempting to call mbrlen() in the middle of " << str
              << " while in initial shift state returns "
              << (int)mbrlen(&str[1], str.size(), &mb) << '\n';
 
}

Вывод:

The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2)
The remaining 2 bytes of 水 hold 2 bytes of the multibyte character
Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1

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

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

(функция) [edit]
возвращает количество байтов в следующий символ многобайтовых
Оригинал:
returns the number of bytes in the next multibyte character
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [edit]
[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 функция-член) [edit]
C documentation for mbrlen