66

方法はありますか?私のコンピュータは 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 *'

どうすればいいですか?

4

4 に答える 4

104

最初にそれを std::wstring に変換します。

std::wstring widestr = std::wstring(str.begin(), str.end());

次に、C 文字列を取得します。

const wchar_t* widecstr = widestr.c_str();

これは ASCII 文字列に対してのみ機能しますが、基になる文字列が UTF-8 でエンコードされている場合は機能しません。MultiByteToWideChar() のような変換ルーチンを使用すると、このシナリオが適切に処理されます。

于 2008-10-29T13:41:13.257 に答える
47

std::wstring オブジェクトがある場合は、それを呼び出しc_str()て次を取得できwchar_t*ます。

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();

ただし、狭い文字列を操作しているため、最初に幅を広げる必要があります。ここにはさまざまなオプションがあります。1 つは、Windows の組み込みMultiByteToWideCharルーチンを使用することです。LPWSTRと同等の が得られますwchar_t*

于 2008-10-29T13:38:26.537 に答える
9

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 のみです。

于 2008-10-29T13:49:56.857 に答える
5

Linux/Unix を使用している場合は、GNU C (ISO C 90 から) で定義されている mbstowcs() および wcstombs() を参照してください。

  • mbs は「Multi Bytes String」の略で、基本的にはゼロで終了する通常の C 文字列です。

  • wcs は Wide Char String の略で、wchar_t の配列です。

ワイド文字の詳細については、glibc のドキュメントを参照してください

于 2010-01-14T13:54:25.343 に答える