[解決済み】MultiByteToWideCharの使い方は?
質問
通常の
string
を
wstring
. このために、私は Windows API 関数を使おうとしています。
MultiByteToWideChar
.
しかし、それは私のために動作しません。
以下は、私が行ったことです。
string x = "This is c++ not java";
wstring Wstring;
MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , x.size() , &Wstring , 0 );
最後の行は、コンパイラーエラーを発生させます。
'MultiByteToWideChar' : cannot convert parameter 5 from 'std::wstring *' to 'LPWSTR'
このエラーを修正するにはどうしたらいいですか?
また、引数の
cchWideChar
? 0でいいんですか?
解決方法は?
を呼び出す必要があります。
MultiByteToWideChar
を2回実行します。
-
の最初の呼び出しは
MultiByteToWideChar
は、ワイド文字列に必要なバッファサイズを求めるために使用されます。を見てください。 マイクロソフトのドキュメント ;と記載されています。この関数が成功し cchWideChar が 0 の場合、戻り値は lpWideCharStr .
このように
MultiByteToWideChar
は、必要なサイズを与えるために、最後のパラメータの値として0を渡します。cchWideChar
. またNULL
をその前のものと同じにします。lpWideCharStr
. -
前のステップのバッファサイズを使用して、ワイド文字列を収容するのに十分な大きさの非構成バッファを取得します。このバッファを
MultiByteToWideChar
. そして今回、最後の引数は0ではなく、実際のバッファのサイズにする必要があります。
大雑把な例です。
int wchars_num = MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , -1, NULL , 0 );
wchar_t* wstr = new wchar_t[wchars_num];
MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , -1, wstr , wchars_num );
// do whatever with wstr
delete[] wstr;
また、-1 を使っていることに注意してください。
cbMultiByte
引数で指定します。これにより、結果の文字列はヌル終端となり、それらを処理する手間が省けます。
関連
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み】std::stringからchar*への変換
-
[解決済み】 ostreamの<<演算子を適切にオーバーロードする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】coutはstdのメンバではない
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】Enterキーを押して続行する