m17n ライブラリ 1.8.4
読み取り中…
検索中…
一致する文字列を見つけられません
フィールド
MConverter 構造体

コード変換に用いられる構造体. [詳解]

#include <m17n.h>

フィールド

int lenient
 
int last_block
 
unsigned at_most
 
int nchars
 
int nbytes
 
enum MConversionResult result
 
union {
   void *   ptr
 
   double   dbl
 
   char   c [256]
 
status
 
void * internal_info
 

詳解

コード変換に用いられる構造体.

コード変換に用いられる構造体。最初の3つのメンバは変換を制御する。

フィールド詳解

◆ lenient

int MConverter::lenient

厳密な変換が必要でない場合に値を 0 以外にする。 デフォルトでは、変換は厳密である。

変換が厳密とは、デコードの際には最初の不正なバイトでコンバータが止まること、 エンコードの際には変換されるコード系でサポートされない最初の文字でコンバータが止まることを指す。 これらの場合、MConverter->result はそれぞれ MCONVERSION_RESULT_INVALID_BYTEMCONVERSION_RESULT_INVALID_CHAR となる。

変換が厳密でない場合には、デコードの際の不正なバイトはそのバイトのまま残る。 またエンコードの際には、不正な文字が Unicode 文字の場合には "<U+XXXX>" に、そうでない場合には "<M+XXXXXX>" に置き換えられる。

◆ last_block

int MConverter::last_block

バイト列の終端のブロックをデコードする際、または文字列の終端のブロックをエンコードする際は、値を 0 以外にする。この値は以下のように変換に影響する。

デコーディングの際に最後の数バイトが正しいバイトシークエンスを形成するには短すぎる場合:

値が 0 でなければ、変換はそのシークエンスの最初のバイトにおいて、エラー (MCONVERSION_RESULT_INVALID_BYTE) で終る。

値が 0 ならば、変換は成功して終る。 問題の数バイトはキャリーオーバとしてコンバータに保持され、変換の続きを行う際に変換するバイト列の前に付けられる。

エンコーディングの際にコード系が文脈依存の場合、

値が 0 でなければ、コンテキストを最初に戻すためのバイト列がソースの文字とかかわりなく変換の結果生成されることがある。

値が 0 ならば、そのようなバイト列は生成されない。

◆ at_most

unsigned MConverter::at_most

0 でなければ、変換される最大の文字数を指定する。

◆ nchars

int MConverter::nchars

以下の3つのメンバは変換の結果を表すためのものである。

最近にデコード/エンコードされた文字数。

◆ nbytes

int MConverter::nbytes

最近にデコード/エンコードされたバイト数。

◆ result

enum MConversionResult MConverter::result

コード変換の結果を示すコード。

◆ ptr

void* MConverter::ptr

◆ dbl

double MConverter::dbl

◆ c

char MConverter::c[256]

◆ 

union { ... } MConverter::status

コード変換の状況に関する種々の情報。内容はコード系のタイプによって異なる。 status はどのような型へのキャストに対しても安全なようにメモリアラインされており、また最低256バイトのメモリ領域が使えるようになっている。

◆ internal_info

void* MConverter::internal_info

このメンバは内部的に使用され、アプリケーションプログラムは触れてはならない。


m17n-lib Home