C++ 中的mbrtowc() 函數將窄多字節字符轉換為寬字符(wchar_t 類型)。
mbrtowc() 函數在<cwchar> 頭文件中定義。
mbrtowc()原型
size_t mbrtowc( wchar_t* pwc, const char* s, size_t n, mbstate_t* ps );
mbrtowc()函數將s表示的多字節字符轉換為寬字符,並存儲在pwc指向的地址中。
- 如果
s
不是空指針,最大n
從指向的字節開始的字節s
檢查以確定完成下一個多字節字符(包括任何移位序列)所需的字節數。
如果接下來n
多字節字符s
完整且有效,函數將其轉換為對應的寬字符並存儲在指向的位置pwc
. - 如果
s
為空指針,則參數n
和pwc
與函數調用無關,調用等價於std::mbrtowc(NULL, "", 1, ps)
。 - 如果生成的寬字符為空字符,則存儲在
*ps
中的轉換狀態為初始移位狀態。
參數:
pwc
:指向存儲轉換後的寬字符的內存地址的指針。s
:指向要轉換的多字節字符的指針。n
:要檢查的 s 中的最大字節數。ps
:指向解釋多字節字符串時使用的轉換狀態的指針
返回:
mbrtowc() 函數返回以下第一個有效的值:
- 如果從 s 轉換的寬字符為空(如果 pwc 不為空),則為 0。
- 從 s 成功轉換的多字節字符數。
- -2 如果接下來的 n 個字節不代表一個完整的多字節字符。
- -1 是發生編碼錯誤,errno 設置為EILSEQ.
示例:mbrtowc() 函數如何工作?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
void test_mbrtowc(const char *s, size_t n)
{
mbstate_t ps = mbstate_t();
wchar_t wc;
int retVal = mbrtowc(&wc, s, n, &ps);
if (retVal == -2)
wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl;
else if (retVal == -1)
wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl;
else if (retVal == 0)
wcout << L"The converted wide character is a null wide character" << endl;
else
{
wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, ";
wcout << L"Resulting wide character is " << wc << endl;
}
}
int main()
{
setlocale(LC_ALL, "en_US.utf8");
char str1[] = "\u00b5";
char str2[] = "\0";
test_mbrtowc(str1, 1);
test_mbrtowc(str1, 5);
test_mbrtowc(str2, 5);
return 0;
}
運行程序時,輸出將是:
Next 1 byte(s) doesn't represent a complete multibyte character Next 5 byte(s) hold 2 bytes of multibyte character, Resulting wide character is µ The converted wide character is a null wide character
相關用法
- C++ mbrtowc()用法及代碼示例
- C++ mbrtoc32()用法及代碼示例
- C++ mbrtoc16()用法及代碼示例
- 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++ mbrtowc()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。