• 締切済み

std::stringからLPCWSTR型への変換

sankaku197の回答

回答No.3

要はcharからwchar_tへの変換ですよね。 (LPCWSTR==wchar_t*ですからね) string a = "example"; TCHAR b[32]; CString c = a.c_str(); lstrcpy(b,c); おそらくこれで大丈夫だと思います。 おそらくというのは、TCHARとCStringという型はプロジェクトの文字セットに依存する型だからです。 つまり文字セットがマルチバイトにもかかわらず、LPCWSTRが必要な場合には、このコードは使えません。 その場合、強制的にchar→wchar_tに変換する手段として MultiByteToWideChar(); という関数があります。 >もしくは、最初からLPCWSTR型でファイルから読み込める方法などがあれば教えてください ファイルの形式がワイド文字列(unicode)なら、wifstreamとwstringで読み込めるのではないでしょうか。 試してないのですけど、これなら最初からwchar_tですよね。

関連するQ&A

  • VC++ std::stringからLPCWSTRに変換

    Visual C++ 2008を使用してTextBoxからの値(System::String)をmciSendString(LPCWSTR)に渡したいと思っています。 そこで自分はSystem::Stringをstd::stringに変換しそれから渡そうと思っているのですが・・・ 『error C2664: 'mciSendStringW' : 1 番目の引数を 'std::string' から 'LPCWSTR' に変換できません。』 のようにエラーが出ます。 当然そのまま与えてるので出るのは当たり前なのですが、キャストや変換の仕方が分からず調べ様にも困っている次第です。 C++に今回始めての挑戦で、右も左も分からないのですが、もしよろしければご指南頂けませんでしょうか?

  • 数値を std::string に変換

    C++で 数値を std::string に変換 する方法はあるのでしょうか? << や += などやってみましたができませんでした。 やはりC同様に snprintf() などを使うしかないのでしょうか?

  • unsigned char SJis[2]からstd::stringに変換

    開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?

  • 【C++/CLI】int型からString型への変換

    C++/CLIにて、int型変数の値 int test1 = -1; int test2 = -10; をString型に変換し「-1」「-10」といったような文字列に、 変換しようと思っています。 String::Format( "{0:D1}", test1 ); String::Format( "{0:D2}", test2 ); といった方法で可能なのは分かったのですが、 この方法だと、Formatの引数を値の桁数に応じて変えねばなりません。 ※String::Format( "{0:D2}", test1 );  のようにすると、「-01」となってしまうため。 桁数を意識せずに、int型変数の値をそのまま文字列に変換するような 良い方法があれば、ご教示お願いできませんでしょうか?

  • string型とsbyte*型の変換

    現在、C++で作成したクラスを、 C#から呼び出し実行しようとしております。 C++側での引数のデータ型は、「char *」 、 C#側での引数は、「sbyte*」となっています。 このクラスに対し、C#側から文字列をC++側に渡したい場合、 string型からsbyte*型へ変換しなければならないと 考えているのですが、その方法がわかりません。 そもそもの考え方が正しいのかどうかもわからない状態ですので、 質問そのものがとんちんかんなことを聞いているのかも知れませんが、 どうぞよろしくお願いいたします。

  • VC String型のエンディアン変換

    お世話になります String型の文字列のそれぞれの文字(一文字ずつ)の エンディアンを変更したいのですが、簡単な方法はないでしょうか? 今考えている方法は Stringから一文字ずつcharに入れ込んで このcharをシフトとマスクで入れ替える方法なのですが ((val<<8) & 0xff00) | ((val>>8) & 0x00ff) エンディアン変換の前後でString⇒charとchar⇒Stringを行うので、 少し煩雑になるのが気になっております。 型変換無しでエンディアン変換できないでしょうか

  • Stringのフォーマットの変換方法(Java)

    Java実行時の引数として渡した14桁の数値(文字列)を、 ----- yyyy-mm-dd hh:mm:ss ----- の形式にフォーマット変換したいです。 (日時のように書いてますが、型はDateやTimestampではなくStringのままでもOK) 文字列をsubstringメソッドで区切って、 その後に「-」や「:」と+で文字列連結させる方法も考えたのですが、 そのようにせずにもう少しシンプルに変換する方法はありませんでしょうか?

    • ベストアンサー
    • Java
  • Stringの文字列をString[]配列に変換したい

    お世話になります♪ たとえばこういうStringの文字列があるとします。 String s = "私は Javaを 勉強 しています。"; これを下記のようなイメージでString[]配列に変換したいのですが、 {"私は","Javaを","勉強","しています。"}; 何かいい方法はないでしょうか? ヒントをください! よろしくお願いします。

    • ベストアンサー
    • Java
  • c++のstd::stringについて

    VC++2008でフォームアプリケーションを作成しています。 シリアルポートから受け取った文字列の一部を抜き出して処理をするため,VBではmid関数に相当するような機能として,std::stringを使用しようとしています。 しかし, std::string str("ABC" ,1,2); とした場合は『BC』が問題なく返ってきましたが, std::string str(recieveddata ,1,2); のように,文字列の部分を変数にしたら,ビルドエラーになってしまいます。(ポインタ?を理解する必要があるのでしょうか?) どのようにすれば,VBのmid相当の機能を実現できるでしょうか?

  • System::String->char*変換でき

    C++/CLIでSystem::String^文字列をchar*に変換する関数を書いたのですが、256文字以上の文字列を投げて、戻値を確認してみると、255文字分しか中身が詰まっていません。元の文字列はアスキーのみです。 #include <msclr/marshal.h> using namespace msclr::interop; static char* toPtChar(const String^ Text) { String^ temp = (String^)Text; msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context(); char* res = ((char*)(context->marshal_as<const char*>(temp))); return res; } この関数をどのように変更すれば、256文字以上変換できるでしょうか?