当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ mbsrtowcs()用法及代码示例


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