mbrtoc16()是C /C++中的內置函數,它將狹窄的多字節字符轉換為16位字符表示形式。它在C++的uchar.h頭文件中定義。
用法:
ssize_t mbrtoc16( char16_t* pc16, const char* s, size_t n, mbstate_t* ps);
參數:該函數接受四個強製性參數,如下所述:
- s:指定要轉換的多字節字符。
- pc16:指定存儲位置以存儲結果16位字符。
- n:指定s中要轉換的最大字節數。
- ps:指定在解釋多字節字符串時使用的mbstate_t對象。
返回值:該函數返回五個值,如下所示:
- 如果轉換後的字符為空字符,則為0。
- 已成功轉換為16位字符的多字節字符的字節數(最多n個)。
- 如果來自multi-char16_t字符的下一個char16_t(例如代理對)現在已寫入* pc16,則為-3。在這種情況下,不會從輸入中處理任何字節。
- -2,如果接下來的n個字節構成一個不完整但到目前為止有效的多字節字符。在這種情況下,不會將任何內容寫入* pc16。
- 如果發生編碼錯誤,則為-1。在這種情況下,不會將任何內容寫入* pc16,將errno設置為EILSEQ,並且未指定* ps的值。
以下示例程序旨在說明上述函數。
程序1:
// C++ program to illustrate the
// mbrtoc16() function
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main(void)
{
char16_t pc16;
char s[] = "G";
mbstate_t ps{};
int length;
// initializing the function
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 = 0g%02hd\n", pc16);
}
輸出:
Multibyte string = G Length = 1 16-bit character = 0g71
程序2:
// C++ program to illustrate the
// mbrtoc16() function
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main(void)
{
char16_t pc16;
char s[] = "";
mbstate_t ps{};
int length;
// initializing the function
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 = 1e%04xy\n", pc16);
}
輸出:
Multibyte string = Length = 0 16-bit character = 1e0000y
相關用法
- C++ cin get()用法及代碼示例
- C++ set_symmetric_difference用法及代碼示例
- C++ ratio_not_equal()用法及代碼示例
- C++ ios bad()用法及代碼示例
- C++ mbrtoc32()用法及代碼示例
- C++ negative_binomial_distribution用法及代碼示例
- C++ ratio_equal()用法及代碼示例
- C++ ios eof()用法及代碼示例
注:本文由純淨天空篩選整理自RICHIK BHATTACHARJEE大神的英文原創作品 mbrtoc16() in C/C++ with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。