std::string を const wchar_t に変換したい *
質問
何か方法はありますか?私のコンピューターはAMD64です。
::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);
私が使用したとき:
loadU(&str);
VS2005 コンパイラは次のように言います。
Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'
どうすればいいでしょうか?
解決
std :: wstringオブジェクトがある場合、 c_str()
を呼び出して wchar_t *
を取得できます:
std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
ただし、狭い文字列を操作しているため、最初に幅を広げる必要があります。ここにはさまざまなオプションがあります。 1つは、Windowsの組み込み MultiByteToWideChar
ルーチン。これにより、 wchar_t *
と同等の LPWSTR
が得られます。
他のヒント
まずstd :: wstring:に変換します
std::wstring widestr = std::wstring(str.begin(), str.end());
次にC文字列を取得します:
const wchar_t* widecstr = widestr.c_str();
これはASCII文字列でのみ機能しますが、基になる文字列がUTF-8でエンコードされている場合は機能しません。 MultiByteToWideChar()などの変換ルーチンを使用すると、このシナリオが適切に処理されます。
ATLテキスト変換マクロを使用して、狭い(char)文字列を広い(wchar_t)文字列に変換できます。たとえば、std :: string:
を変換するには#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);
コードページを指定することもできます。そのため、std :: stringにUTF-8文字が含まれている場合は使用できます。
CA2W pszWide(str.c_str(), CP_UTF8);
非常に便利ですが、Windowsのみです。
Linux/Unix を使用している場合は、GNU C (ISO C 90 より) で定義されている mbstowcs() と wcstombs() を見てください。
mbs は「Multi Bytes String」の略で、基本的には通常のゼロで終わる C 文字列です。
wcs は Wide Char String の略で、wchar_t の配列です。
ワイド文字に関する背景の詳細については、glibc のドキュメントを参照してください。 ここ.