Home C&C++函数库 c++ 语法 程序源码 Linux C库

c16rtomb

函数   <cuchar>

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(以字节为单位)写入的多字节序列的大小,包括任何移位字符。这可能是零。

如果没有字符对应,则函数返回(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;
}

输出:
Juan Soulié

🍄  另请参阅



mbrtoc16 转换多字节序列为16位字符(function )
c32rtomb 转换32位字符为多字节序列(function )
wcrtomb 转换宽字符为多字节序列(function )

联系我们 免责声明 关于CandCplus 网站地图