C / C ++程序中的mbrtowc()函数

在本文中,我们将讨论C ++ STL中std::mbrtowc()函数的工作,语法和示例。

什么是std::mbrtowc()?

std::mbrtowc()函数是C ++ STL中的内置函数,在<cwchar>头文件中定义。mbrtowc()意味着它将窄多字节字符串转换为宽字符。此函数用于将一个窄的多字节字符转换为宽字符表示。

语法

size_t mbrtowc( wchar_t* pwc, char* str, size_t n, mbstate_t* ps);

参量

该函数接受以下参数-

  • pwc-这是指向我们要存储输出的位置的指针。

  • str-用作输入的字符串。

  • n-这是要检查的字节数。

  • ps-当我们解释多字节字符串时,它是指向状态对象的指针。

返回值

该函数的返回值根据以下条件而有所不同-

  • 0-当必须转换的str中的字符为NULL时,该函数将返回零。

  • 1…n-从字符串* str转换而来的多字节字符的字节数。

  • -2-当接下来的n个字节不完整但到目前为止是有效的多字节字符时,我们将得到-2。

  • -1-当我们遇到编码错误时,我们得到-1,没有任何内容写入* pwc。

示例

#include <bits/stdc++.h>
using namespace std;
void print_(const char* ch){
   mbstate_t temp = mbstate_t();
   int cal = strlen(ch);
   const char* i = ch + cal;
   int total;
   wchar_t con;
   while ((total = mbrtowc(&con, ch, i - ch, &temp)) > 0){
      wcout << "Next " << total <<" bytes are the character " << con << '\n';
      ch += total;
   }
}
int main(){
   setlocale(LC_ALL, "en_US.utf8");
   const char* len = u8"z\u00df\u6c34";
   print_(len);
}

输出结果

Next 1 bytes are the character z
Next 2 bytes are the character ß
Next 3 bytes are the character 水

示例

#include <bits/stdc++.h>
using namespace std;
void print_(const char* ch){
   mbstate_t temp = mbstate_t();
   int cal = strlen(ch);
   const char* i = ch + cal;
   int total;
   wchar_t con;
   while ((total = mbrtowc(&con, ch, i - ch, &temp)) > 0){
      wcout << "Next " << total <<" bytes are the character " << con << '\n';
      ch += total;
   }
}
int main(){
   setlocale(LC_ALL, "en_US.utf8");
   const char* len = u8"\xE2\x88\x83y\xE2\x88\x80x\xC2";
   print_(len);
}

输出结果

Next 3 bytes are the character ∃
Next 1 bytes are the character y
Next 3 bytes are the character ∀
Next 1 bytes are the character x