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

wcrtomb

函数  <cwchar>

size_t wcrtomb (char* pmb, wchar_t wc, mbstate_t* ps);
转换宽字符为多字节序列

宽字符wc被转换为它相应的多字节值,并存储在pmb指向的数组中。 函数返回pmb指向的多字节序列的字节宽度。

该函数使用(并更新)由ps描述的转换状态。如果ps是一个空指针, 则该函数使用自己的内部转换状态,只有调用该函数才会在必要时改变该状态。

如果wc是一个空宽字符,则该函数将重置转换状态并存储一个空字节, 并在该字节之前存储恢复初始转换状态所需的任何转换序列。

使用空指针作为pmb调用该函数也会重置转换状态(并忽略参数wc)。

这个函数的行为取决于所选C语言环境的LC_CTYPE类型。

这是wctomb (<cstdlib>)的 restartable 版本。

☲  参数



pmb
指向大到足以容纳多字节序列的数组的指针。
当前语言环境中字符的多字节序列的最大长度是MB_CUR_MAX字节。
另外,也可以使用空指针调用该函数,在这种情况下, 该函数总是将转换状态重置为初始状态,就像wc是L'\0'(忽略作为wc传递的实际值)。

wc
wchar_t类型的宽字符。

ps
指向定义转换状态的mbstate_t对象的指针。
如果这是一个空指针,函数使用它自己的内部转换状态,该状态在程序启动时初始化,只在调用该函数时更改。

☉  返回值



以pmb(以字节为单位)写入的多字节序列的宽度,包括任何转换字符。
如果没有字符对应,则函数返回(size_t)-1并将errno设置为EILSEQ。

如果pmb是空指针,则函数返回1加上恢复初始转换状态所需的字节数 (就像函数在内部缓冲区上操作,而wc是L'\0')。

☣  示例



/* wcrtomb example */
#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  const wchar_t* pt = L"wcrtomb example";
  char buffer [MB_CUR_MAX];
  size_t length, i;
  mbstate_t mbs;

  mbrlen (NULL,0,&mbs);   /* initialize mbs */

  while (*pt) {
    length = wcrtomb(buffer,*pt,&mbs);
    if ((length==0)||(length>MB_CUR_MAX)) break;
    putchar ('[');
    for (i=0;i<length;++i) putchar (buffer[i]);
    putchar (']');
    ++pt;
  }

  return 0;
}

该示例打印宽字符串转换为使用所选区域设置(在本例中为“C”区域设置)的多字节字符。
输出:
[w][c][r][t][o][m][b][ ][e][x][a][m][p][l][e]


🍄  另请参阅



wctomb 将宽字符转换为多字节序列(function )
mbrlen 获取多字节字符的长度(function)
mbrtowc 转换多字节序列为宽字符(function)
mbsrtowcs 转换多字节字符串到宽字符字符串(function)
wcsrtombs 转换宽字符字符串为多字节字符串(function)

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