在本文中,我们将讨论C ++ STL中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