132

std::string を LPCWSTR に変換する方法またはコード スニペットを探しています。

4

6 に答える 6

142

解決策は、実際には他の提案よりもはるかに簡単です。

std::wstring stemp = std::wstring(s.begin(), s.end());
LPCWSTR sw = stemp.c_str();

何よりも、プラットフォームに依存しません。

于 2010-11-09T23:12:21.993 に答える
13

ATL/MFC 環境の場合は、ATL 変換マクロを使用できます。

#include <atlbase.h>
#include <atlconv.h>

. . .

string myStr("My string");
CA2W unicodeStr(myStr);

その後、unicodeStr を LPCWSTR として使用できます。Unicode 文字列のメモリがスタック上に作成されて解放された後、unicodeStr のデストラクタが実行されます。

于 2008-08-26T02:30:25.013 に答える
2

標準のコンバーターを使用することを好みます。

#include <codecvt>

std::string s = "Hi";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide = converter.from_bytes(s);
LPCWSTR result = wide.c_str();

この回答で詳細を確認してください: https://stackoverflow.com/a/18597384/592651


2020 年 12 月 21 日更新: 私の回答は @Andreas H によってコメントされました。彼のコメントは価値があると思ったので、それに応じて回答を更新しました。

  1. codecvt_utf8_utf16C++17 では非推奨です。
  2. また、このコードは、ソース エンコーディングが UTF-8 であることを暗示していますが、通常はそうではありません。
  3. C++20 では、そのため、UTF-8 用に別の型 std::u8string があります。

しかし、私はまだ古いバージョンの C++ を使用しており、たまたまソース エンコーディングが UTF-8 だったので、うまくいきました。

于 2020-10-26T06:39:47.710 に答える
1

QT を使用している場合は、QString に変換すると、myqstring.toStdWString() でうまくいきます。

于 2021-07-21T07:58:05.640 に答える