函数
<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)。

这是char16_t版本的wcrtomb<cwchar>)。

参数

pmb
指向一个足以容纳多字节序列的数组的指针。
在当前 locale 中,一个字符的多字节序列的最大长度是 MB_CUR_MAX 字节。

或者,可以使用空指针调用该函数,在这种情况下,函数将转换状态(ps 或其内部状态)重置为初始状态并返回零。
c16
16位字符类型char16_t.
ps
指向一个定义转换状态的 mbstate_t 对象的指针。

返回值

写入pmb的多字节序列的大小(以字节为单位),包括任何移位字符。此值可能为零。

如果没有字符对应关系,函数返回(size_t)-1并设置 errnoEILSEQ.

如果pmb为null指针,则函数不在pmb处存储任何字节,因此返回零。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 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;
}

可能的输出

Juan Soulié


另见