標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C 改訂 |
両方 | z/OS® V2R1 |
#include <uchar.h>
size_t mbrtoc16(char16_t * restrict pc16,
const char * restrict s,
size_t n,
mbstate_t * restrict ps);
mbrtoc16() 関数は、マルチバイト文字を char16_t 型のワイド文字に変換し、マルチバイト文字のバイト数を戻します。
s が NULL ポインターでない場合、mbrtoc16() 関数は、s が示すバイトから始まる最大 n バイトを検査して、次のマルチバイト文字を完成するのに必要なバイト数を判別します (シフト・シーケンスを含む)。この関数は、次のマルチバイト文字が完成していて有効であると判断すると、対応するワイド文字の値を判別し、pc16 が NULL ポインターでなければ、該当する最初の (または唯一の) 文字を、pc16 が指すオブジェクトに保管します。以降の呼び出しは、すべての文字が保管されるまで、追加の入力を使用することなく、連続するワイド文字を保管します。対応するワイド文字が NULL ワイド文字の場合には、記述されている結果の状態は初期変換状態です。
s が NULL ポインターである場合、mbrtoc16() 関数は、mbrtoc16(NULL,"",1,ps) 呼び出しと同等になります。この場合、パラメーター pc16 および n の値は無視されます。
ps が NULL ポインターである場合、mbrtoc16() は独自の内部オブジェクトを使用してシフト状態をトラッキングします。そうでない場合、*ps は、有効な mbstate_t オブジェクトでなければなりません。mbstate_t オブジェクト *ps に 0 を割り当てるか、mbrtoc16(NULL,NULL,0,ps) を呼び出すことによって、このオブジェクトを初期状態に初期化できます。
#include <stdio.h>
#include <stdlib.h>
#include <uchar.h>
int main(void)
{
char16_t c16;
char mbs[] = "a" ; /* string containing the multibyte character */
mbstate_t ss = 0 ; /* set shift state to the initial state */
int length = 0 ;
/* Determine the length of the multibyte character pointed to by */
/* mbs. Store the multibyte character in the char16_t object */
/* called c16. */
length = mbrtoc16(&c16, mbs, MB_CUR_MAX, &ss);
if (length < 0) {
/* -2 and -3 return value could not happen during converting the 'a' */
perror("mbrtoc16() fails to convert");
exit(-1);
}
printf(" mbs:¥"%s¥"¥n", mbs);
printf(" length: %d ¥n", length);
printf(" c16: 0x%04hx ¥n", c16);
}
mbs:"a"
length: 1
c16: 0x0061