C++ 中的 mbrtoc16() 函數將窄多字節字符轉換為 16 位字符表示。
mbrtoc16() 函數在<cuchar> 頭文件中定義。
mbrtoc16() 原型
size_t mbrtoc16( char16_t* pc16, const char* s, size_t n, mbstate_t* ps);
mbrtoc16() 函數最多將 s
表示的 n
多字節字符轉換為其等效的 utf-16 字符,並將其存儲在 pc16
指向的內存位置。
如果 s
表示空指針,則忽略 n
和 pc16
的值,調用等效於 mbrtoc16(NULL, "", 1, ps)。
如果生成的結果字符為空,則轉換狀態*ps
表示初始移位狀態。
參數:
pc16
:指向存儲結果 16 位字符的內存位置的指針。s
:指向要轉換的多字節字符的指針。n
:要轉換的 s 中的最大字節數。ps
:指向解釋多字節字符串時使用的 mbstate_t 對象的指針。
返回:
mbrtoc16() 函數返回與以下情況匹配的以下值中的第一個:
- 如果轉換的字符是空字符,則為 0。
- 成功轉換為 16 位字符的多字節字符的字節數(最多
n
)。 - -3 如果來自 multi-char16_t 字符(例如代理對)的下一個
char16_t
現在已寫入*pc16
。在這種情況下,不會從輸入中處理任何字節。 - -2 如果下一個
n
字節構成不完整但到目前為止有效的多字節字符。在這種情況下,不會向*pc16
寫入任何內容。 - -1 如果發生編碼錯誤。在這種情況下,沒有寫入任何內容
*pc16
, errno 設置為EILSEQ和價值*ps
未指定。
示例: mbrtoc16() 函數如何工作?
#include <cstdio>
#include <cstdlib>
#include <cuchar>
#include <iostream>
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\n", pc16);
return 0;
}
運行程序時,輸出將是:
Multibyte string = x Lengt>h = 1 16-bit character = 0x0078
相關用法
- C++ mbrtoc16()用法及代碼示例
- C++ mbrtoc32()用法及代碼示例
- C++ mbrtowc()用法及代碼示例
- C++ mbrlen()用法及代碼示例
- C++ mbtowc()用法及代碼示例
- C++ mbsinit()用法及代碼示例
- C++ mbstowcs()用法及代碼示例
- C++ mblen()用法及代碼示例
- C++ mbsrtowcs()用法及代碼示例
- C++ map lower_bound()用法及代碼示例
- C++ multimap key_comp()用法及代碼示例
- C++ merge()用法及代碼示例
- C++ multimap empty()用法及代碼示例
- C++ multimap cend()用法及代碼示例
- C++ multiset begin()、end()用法及代碼示例
- C++ map::at()用法及代碼示例
- C++ multiset value_comp()用法及代碼示例
- C++ multimap insert()用法及代碼示例
- C++ memset()用法及代碼示例
- C++ map max_size()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ mbrtoc16()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。