std::wctomb
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <cstdlib> 中定义
|
||
int wctomb( char *s, wchar_t wc ); |
||
。一个宽字符转换成
wc
多字节编码,并将其存储(包括任何移位序列)中的char数组,该数组的第一个元素是指向s
。不超过MB_CUR_MAX字符存储.原文:
Converts a wide character
wc
to multibyte encoding and stores it (including any shift sequences) in the char array whose first element is pointed to by s
. No more than MB_CUR_MAX characters are stored.。
wc
是空字符,空字节写入s
,在此之前的任何必要的移位序列的,恢复初始位移状态.原文:
If
wc
is the null character, the null byte is written to s
, preceded by any shift sequences necessary to restore the initial shift state.。如果
s
是一个空指针,将全局转换状态,并确定是否使用了移位序列.原文:
If
s
is a null pointer, resets the global conversion state and determines whether shift sequences are used.目录 |
[编辑] 。参数。
s | - | 。用于输出的字符数组的指针。
原文: pointer to the character array for output |
wc | - | 。宽字符转换。
|
===。 返回值。===
。如果
s
是不是一个空指针,返回的字节数中所包含的多字节表示,如果wc
或-1wc
是不是一个有效的字符. 原文:
If
s
is not a null pointer, returns the number of bytes that are contained in the multibyte representation of wc
or -1 if wc
is not a valid character. 。如果
s
是一个空指针,将其内部的转换状态来表示的初始变速状态,并返回0如果当前的多字节编码不是状态依赖(不使用移位序列)或一个非零的值,如果当前的多字节编码是状态依赖(使用Shift序列).原文:
If
s
is a null pointer, resets its internal conversion state to represent the initial shift state and returns 0 if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).[编辑] 。注释。
。每次调用
wctomb
更新的内部全局转换状态(静态std::mbstate_t类型的对象,只知道此功能)。如果多字节编码使用上档状态,这个函数是不可重入的。在任何情况下,多线程不应该叫wctomb
不同步:std::wcrtomb可以用来代替.原文:
Each call to
wctomb
updates the internal global conversion state (a static object of type std::mbstate_t, only known to this function). If the multibyte encoding uses shift states, this function is not reentrant. In any case, multiple threads should not call wctomb
without synchronization: std::wcrtomb may be used instead.[编辑] 。为例。
#include <iostream> #include <clocale> #include <string> #include <cstdlib> void print_wide(const std::wstring& wstr) { bool shifts = std::wctomb(NULL, 0); // reset the conversion state std::cout << "shift sequences " << (shifts ? "are" : "not" ) << " used\n"; for (wchar_t wc : wstr) { std::string mb(MB_CUR_MAX, '\0'); int ret = std::wctomb(&mb[0], wc); std::cout << "multibyte char " << mb << " is " << ret << " bytes\n"; } } int main() { std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding std::wstring wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋" print_wide(wstr); }
输出:
shift sequences not used multibyte char z is 1 bytes multibyte char ß is 2 bytes multibyte char 水 is 3 bytes multibyte char 𝄋 is 4 bytes
[编辑] 。另请参阅。
未来的多字节字符转换为宽字符 原文: converts the next multibyte character to wide character (函数) | |
一个宽字符转换为多字节表示,给定的状态 原文: converts a wide character to its multibyte representation, given state (函数) | |
[虚]</div></div>
|
转换成一个字符串,如写入文件时,从Internt的externT 原文: converts a string from internT to externT, such as when writing to file (虚拟保护成员函数of std::codecvt )
|
C documentation for wctomb
|