Функція 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 і значення * пс не визначене.
Приклад: Як працює функція 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