std::mbsrtowcs
STD::mbsrtwcs
Defined in header | | |
---|---|---|
std::size_t mbsrtowcs( wchar_t* dst, const char** src, std::size_t len, std::mbstate_t* ps | | |
转换以空结束的多字节字符序列,该序列以*ps
的第一个元素指向的数组*src
它的宽字符表示。如果dst
不为空,转换后的字符存储在wchar的连续元素中。[医]T数组指向dst
.不超过len
宽字符被写入目标数组。
每个多字节字符被转换为调用std::mbrtowc
.在下列情况下停止转换:
- 转换并存储了多字节空字符。
src
设置为NULL
和*ps
表示初始移位状态。
- 遇到根据当前C语言环境%29的无效多字节字符%28。
src
设置为指向第一个未转换的多字节字符的开头。
- 要存储的下一个宽字符将超过
len
...src
设置为指向第一个未转换的多字节字符的开头。如果没有检查此条件,则不检查此条件。dst==
NULL
...
参数
dst | - | pointer to wide character array where the results will be stored |
---|---|---|
src | - | pointer to pointer to the first element of a null-terminated multibyte string |
len | - | number of wide characters available in the array pointed to by dst |
ps | - | pointer to the conversion state object |
返回值
成功后,返回宽字符数,不包括终止字符。L'\0'
,写入字符数组。如果dst==
NULL
,返回将写入给定无限长度的宽字符数。
在转换错误%28时,如果遇到无效的多字节字符%29,则返回static_cast<std::size_t>(-1)、商店EILSEQ在errno,还有树叶*ps处于未指定的状态。
注记
此函数移动src
指向转换的多字节字符串结束的指针。如果dst==
NULL
...
例
二次
#include <iostream>
#include <vector>
#include <clocale>
#include <cwchar>
void print_as_wide(const char* mbstr)
{
std::mbstate_t state = std::mbstate_t(
int len = 1 + std::mbsrtowcs(NULL, &mbstr, 0, &state
std::vector<wchar_t> wstr(len
std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state
std::wcout << "Wide string: " << &wstr[0] << '\n'
<< "The length, including '\\0': " << wstr.size() << '\n';
}
int main()
{
std::setlocale(LC_ALL, "en_US.utf8"
const char* mbstr = u8"z\u00df\u6c34\U0001f34c"; // or u8"zß水?"
print_as_wide(mbstr
}
二次
产出:
二次
Wide string: zß水?
The length, including '\0': 5
二次
另见
mbrtowc | converts the next multibyte character to wide character, given state (function) |
---|---|
wcsrtombs | converts a wide string to narrow multibyte character string, given state (function) |
do_in virtual | converts a string from externT to internT, such as when reading from file (virtual protected member function of std::codecvt) |
c mbsrtwcs文档
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。