函数
<cuchar>

c32rtomb

size_t c32rtomb ( char * pmb, char32_t c32, mbstate_t * ps );
将32位字符转换为多字节序列
32位字符c32被转换为其多字节等价物,并存储在pmb指向的数组中。该函数返回pmb指向的等价多字节序列的字节长度。

如果__STD_UTF_32__已定义,c32应遵循UTF-32编码。

该函数使用(并更新)由 ps 描述的转换状态。如果 ps 是一个空指针,该函数使用其自己的内部转换状态,该状态仅在调用此函数时根据需要进行更改。

如果c32空32位字符,该函数将重置移位状态并存储一个空字节,前面可以有恢复初始移位状态所需的任何移位序列。

pmb为null指针时调用该函数也会重置移位状态(并忽略参数c32)。

这是char32_t<cwchar> (wcrtomb) 的版本。

参数

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

或者,可以使用空指针调用该函数,在这种情况下,函数将转换状态(ps 或其内部状态)重置为初始状态并返回零。
c32
32位字符,类型为char32_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
/* c32rtomb example */
#include <wchar.h>
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  const char32_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 = c32rtomb(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é


另见