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


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

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为空指针,则参数npwc与函数调用无关,调用等价于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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。