Функция mbrtoc16 () в C ++ преобразует узкий многобайтовый символ в 16-битное символьное представление.
Функция mbrtoc16 () определена в заголовочном файле.
mbrtoc16 () прототип
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
Функция mbrtoc16 () преобразует не более n многобайтовых символов, представленных s, в эквивалентный символ utf-16 и сохраняет его в ячейке памяти, на которую указывает pc16.
Если s представляет собой нулевой указатель, значения n и pc16 игнорируются, а вызов эквивалентен mbrtoc16 (NULL, "", 1, ps).
Если полученный в результате символ является нулевым, состояние преобразования * ps представляет начальное состояние сдвига.
Параметры mbrtoc16 ()
- pc16: указатель на ячейку памяти для хранения результирующего 16-битного символа.
- s: указатель на многобайтовый символ для преобразования.
- n: Максимальное количество байтов в s для преобразования.
- ps: указатель на объект mbstate_t, используемый при интерпретации многобайтовой строки.
mbrtoc16 () Возвращаемое значение
Функция mbrtoc16 () возвращает первое из следующих значений, соответствующих приведенным ниже случаям:
- 0, если преобразованный символ является нулевым символом.
- количество байтов (не более n) многобайтового символа, который был успешно преобразован в 16-битный символ.
- -3, если следующий
char16_t
из символа multi-char16_t (например, суррогатная пара) теперь записан в * pc16. В этом случае байты ввода не обрабатываются. - -2, если следующие n байтов составляют неполный, но пока действительный многобайтовый символ. В этом случае в * pc16 ничего не записывается.
- -1 в случае ошибки кодирования. В этом случае в * pc16 ничего не записывается, для errno устанавливается значение EILSEQ, а значение * ps не указано.
Пример: как работает функция mbrtoc16 ()?
#include #include #include #include using namespace std; int main(void) ( char16_t pc16; char s() = "x" ; mbstate_t ps(); int length; length = mbrtoc16(&pc16, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc16() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("16-bit character = 0x%04hx", pc16); return 0; )
Когда вы запустите программу, вывод будет:
Многобайтовая строка = x Длина> h = 1 16-битный символ = 0x0078