2011-09-07 20 views

答えて

5

はい、<cstdlib>には、mbstowcs()wcstombs()があります。

私はこれまでに、これを使用する方法についてsome codeを投稿しました。多分役立つかもしれません。関数を2回、長さを取得するために1回、実際の変換を1回実行するようにしてください。 (ここでは、関数の意味の少しdiscussionです。)手動のchar配列の代わりに、おそらくstd::vector<char>またはstd::vector<wchar_t>が好きでしょう。

wchar_tは、Unicodeとは関係ありません。 Unicodeが必要な場合は、別のライブラリ(iconv()など)を使用してwchar_tからUnicodeにさらに変換し、Unicodeコードポイントのデータ型としてwchar_tを使用しないでください。代わりに、レガシーシステムではuint32_t、最新のシステムではchar32_tを使用してください。

+0

おかげで、しかし、これらを関数は文字列変換用です。 –

+0

1文字に相当する 'mbtowc()'と 'wctomb()'があります。 –

+0

@Amirあなたはそれらを使用して、ある文字長の文字列を1文字長の別の文字列に変換し、その文字を抜き出すことができます。 –

0

実際には16ビット文字だけでなく、実際にUnicodeを使用している場合はICUiconvのようなライブラリを見てください。つまり、Unicodeは単なる文字を扱うのではなく、16ビットのものでもなく、wchar_tのように扱います。それは偶然だが、私はそれが示す価値があったと思った場合

1

どうやらこれは動作しますが、私はそれが常に動作するかどうかを知りたりしないでください:

const char* c = "hey yo"; 
wstring s(c, c + 6); 

wcout << s << endl; 
wcin.get(); 

プリント

hey yo 
関連する問題