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

更新于: 2020年4月17日

116 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告