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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。