2

タイトルにあるように、PWCHARをstd::stringに変換する方法が必要です。私がオンラインで見つけることができる唯一の解決策は反対の変換のためです、それで誰かがこれにいくらかの光を当てることができれば私は本当にそれが欲しいです。ありがとう!

これはC++です。

4

2 に答える 2

1

std::wstringはワイド文字の文字列クラスでもあるため、を使用する方がはるかに簡単です。を本当に使用してstd::string、2バイト文字から1バイト文字またはマルチバイト文字に変換する場合は、その変換を行う関数を使用する必要があります。wcstombs()は、これを行うためのANSIC関数です。プラットフォームが代替手段を提供する場合があります。

于 2012-08-07T21:28:52.100 に答える
1

このMSDNページによると、PWCHARは次のように宣言されています。

typedef wchar_t WCHAR, *PWCHAR;

必要なのはstd::wstring、で宣言されていstringます。

const PWCHAR pwc;
std::wstring str(pwc);

std::wstringどちらも;std::stringの専門分野であるため、と非常によく似ています。std::basic_string違いは、(Windows )をwstring使用するのに対し、を使用することです。wchar_tWCHARstringchar


本当にstringではなく)が必要な場合は、ここwstringに示すようにC++を使用することをお勧めしuse_facetます。

const std::locale locale("C");
const std::wstring src = ...;
const std::string dst = ...;
std::use_facet<std::ctype<wchar_t> >(loc)
    .narrow(src.c_str(), src.c_str() + src.size(), '?', &*dst.begin());

個別にマルチバイトC文字列に変換し、これを使用してを作成することもできますstd::string。ただし、これはC++でこれを行うための推奨される方法ではありません。これを行うための関数はwcstombs、以下のように宣言されています。

size_t wcstombs ( char * mbstr, const wchar_t * wcstr, size_t max );

WideCharToMultiByteWindowsを使用しているため、この手順にも使用できます。

int WideCharToMultiByte(
  __in       UINT CodePage,
  __in       DWORD dwFlags,
  __in       LPCWSTR lpWideCharStr,
  __in       int cchWideChar,
  __out_opt  LPSTR lpMultiByteStr,
  __in       int cbMultiByte,
  __in_opt   LPCSTR lpDefaultChar,
  __out_opt  LPBOOL lpUsedDefaultChar
);

LPSTRMSDNによると次のように定義されています。

typedef CHAR *LPSTR;
typedef char CHAR;
于 2012-08-07T21:29:07.870 に答える