C++官网参考链接:https://cplusplus.com/reference/cuchar/c16rtomb/
函数
<cuchar>
c16rtomb
size_t c16rtomb ( char * pmb, char16_t c16, mbstate_t * ps );
将16位字符转换为多字节序列
16位字符c16被转换为其等价多字节,并存储在pmb指向的数组中。函数返回由pmb指向的等价多字节序列的字节长度。
如果定义了__STD_UTF_16__,c16将遵循UTF-16编码。
该函数使用(并更新)由ps描述的移位状态。如果ps是空指针,则该函数使用自己的内部移位状态,只有在必要时调用该函数才能更改该状态。
如果c16是一个空16位字符,该函数将重置移位状态并存储一个空字节,前面是恢复初始移位状态所需的任何移位序列。
使用空指针作为pmb调用函数也会重置移位状态(并忽略形参c16)。
这是wcrtomb(<cwchar>)的char16_t版本。
形参
pmb
指向足以容纳多字节序列的数组的指针。
当前语言环境中字符的多字节序列的最大长度是MB_CUR_MAX字节。
或者,可以用空指针调用函数,在这种情况下,函数会将移位状态(ps或它自己的内部状态)重置为初始状态并返回0。
c16
char16_t类型的16位字符。
ps
指向定义转换状态的mbstate_t对象的指针。
返回值
以pmb写入的多字节序列的字节大小,包括任何移位字符。这可能是0。
如果没有字符对应,函数返回(size_t)-1并将errno设置为EILSEQ。
如果pmb是空指针,则函数在pmb上不存储字节,因此返回0。
用例
/* c16rtomb example */
#include <wchar.h>
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
const char16_t* pt = u"Juan Souli\u00e9";
char buffer [MB_CUR_MAX];
int i;
size_t length;
mbstate_t mbs;
mbrlen (NULL,0,&mbs); /* initialize mbs */
while (*pt) {
length = c16rtomb(buffer,*pt,&mbs);
if ((length==0)||(length>MB_CUR_MAX)) break;
for (i=0;i<length;++i) putchar (buffer[i]);
++pt;
}
return 0;
}
可能的输出: