C++ 中的mbsrtowcs() 函数将窄多字节字符序列转换为宽字符序列(wchar_t 类型)。
mbsrtowcs() 函数在<cwchar> 头文件中定义。
mbsrtowcs()原型
size_t mbsrtowcs( wchar_t* dest, const char** src, size_t len, mbstate_t* ps );
mbsrtowcs()函数将第一个字节由*src
表示的多字节字符串转换为相应的宽字符表示,并存储在dest
指向的宽字符数组中。最多将 len
宽字符写入 dest
。
转换过程类似于重复调用mbrtowc()。如果出现以下情况,转换将停止:
- 转换并存储了多字节空字符。在这种情况下,
src
设置为空,ps
表示初始移位状态。 - 遇到无效的多字节字符。在这种情况下,
src
设置为指向第一个未转换的多字节字符的开头。 len
宽字符已存储在dest
中。在这种情况下,src
设置为指向第一个未转换的多字节字符的开头。
参数:
dest
:指向存储转换后的宽字符的数组的指针。src
:指向要转换的第一个多字节字符的指针。len
:要存储的最大数字宽字符。ps
:指向解释多字节字符串时使用的转换状态的指针
返回:
- 成功时,mbsrtowcs() 函数返回写入 dest 的宽字符数,不包括终止宽空字符。如果 dest 是一个空指针,它会返回考虑到无限长度而应该写入的宽字符数。
- 转换错误时,返回 -1 并将 errno 设置为EILSEQ.
示例:mbsrtowcs() 函数如何工作?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.utf8");
const char* str = "\u0763\u0757\u077f\u075f";
wchar_t wstr[20];
mbstate_t ps = mbstate_t();
int len = 10;
int retVal;
retVal = mbsrtowcs(wstr, &str, len, &ps);
wcout << L"Number of wide characters written (excluding L\"\\0\") = " << retVal << endl;
wcout << L"Wide character = " << wstr << endl;
return 0;
}
运行程序时,输出将是:
Number of wide characters written (excluding L"\0") = 4 Wide character = ݣݗݿݟ
相关用法
- C++ mbsrtowcs()用法及代码示例
- C++ mbsinit()用法及代码示例
- C++ mbstowcs()用法及代码示例
- C++ mbtowc()用法及代码示例
- C++ mbrtoc32()用法及代码示例
- C++ mbrlen()用法及代码示例
- C++ mbrtoc16()用法及代码示例
- C++ mbrtowc()用法及代码示例
- C++ mblen()用法及代码示例
- 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++ mbsrtowcs()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。