函式
<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é


另見