現在のロケール (setlocale(3) ) によりワイド文字とマルチバイト文字のどちらで解釈するかが決定されます。 ロケールカテゴリ LC_CTYPE の指定によりこの解釈を制御します。 型 wchar_t は、ワイド文字を表現するにあたり、すべてのロケールに対して最大の値を収容できるだけの十分な大きさを持ちます。
マルチバイト文字列には、与えられた表現中で規定されるモード間の切り替えをするための `シフト' 指示子が含まれることがあります。 明示的にシフトの発生を表すバイト列を使用すると、これらのバイトは別々の文字とはみなされずに、それと隣接する文字と一緒にまとめられます。 `初期' シフト状態は区別されて、常に存在しています。 関数 Fn mbstowcs と Fn wcstombs は、マルチバイト文字列が初期シフト状態から始まって解釈されると仮定します。 関数 Fn mblen , Fn mbtowc , Fn wctomb は、内部で静的にシフト状態を維持管理します。 ポインタ Fa mbchar がヌルである呼び出しでは、現在のロケールがシフト状態を必要とする場合は 0 以外が戻されます。シフト状態を必要としない場合は 0 が戻されます。 シフト状態を必要とする場合、シフト状態は初期状態にリセットされます。 LC_CTYPE か LC_ALL カテゴリを指定して Fn setlocale を呼び出した後では、内部シフト状態は未定義になります。
処理に便利なように、値が 0 のワイド文字 (ヌルワイド文字) は、ワイド文字列の終了として認識されます。 値が 0 の文字 (ヌルバイト) は、マルチバイト文字列の終了として認識されます。 マルチバイト文字では、ヌルバイト列は許可されていません。
関数 Fn mblen は、マルチバイト文字 Fa mbchar のバイト長を算出します。 Fa nbytes までが検査されます。
関数 Fn mbtowc はマルチバイト文字 Fa mbchar をワイド文字に変換し、その結果を Fa wcharp が指すオブジェクトに格納します。 Fa nbytes バイトまでが検査されます。
関数 Fn wctomb はワイド文字 Fa wchar をマルチバイト文字に変換し、その結果を Fa mbchar に格納します。 Fa mbchar が指すオブジェクトは、マルチバイト文字を収容できるだけの大きさを持たねばなりません。
関数 Fn mbstowcs は、マルチバイト文字列 Fa mbstring をワイド文字列 Fa wcstring . に変換します。 Fa nwchars の大きさのワイド文字までしか格納されません。 終了を示すヌルワイド文字は、空きがある場合に付加されます。
関数 Fn wcstombs は、ワイド文字列 Fa wcstring をマルチバイト文字列 Fa mbstring に変換します。 Fa nbytes バイトまでが Fa mbstring に格納されます。 文字列の最後の断片的なマルチバイト文字は格納されません。マルチバイト文字列は、空きがあればヌルで終わります。
Fa mbchar が NULL である場合、関数 Fn mblen , Fn mbtowc , Fn wctomb は、シフト状態がサポートされている場合は 0 以外を返し、シフト状態がサポートされていない場合は 0 を返します。 Fa mbchar が有効であると、これらの関数は Fa mbchar で処理されたバイト数を返します。マルチバイト文字を認識できない場合か変換できない場合は -1 を返します。
関数 Fn mbstowcs は、変換されたワイド文字の数を返します。終了を示すヌルワイド文字は数に含めません。 関数 Fn wcstombs は、変換されたバイト数を返します。終了を示すヌルバイトは数に含めません。 不正なマルチバイト文字があると、どちらの関数も -1 を返します。