変換方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
イネ

変換方法について

#1

投稿記事 by イネ » 15年前

CString型からstd::string型に変換するにはどうしたらよいでしょうか?
調べてみたところ、LPCTSTRにキャストする方法がありましたが、試してみたところ、vs2008ではコンパイルが通りませんでした。
よろしくお願い致します。

CString cStr;
std::string str((LPCTSTR)str);

イネ

Re:変換方法について

#2

投稿記事 by イネ » 15年前

すみません、プログラム2行目の変数名を間違えていました。
こちらが正しいです。

CString cStr;
std::string str((LPCTSTR)cStr); // CStringからstd::stringへ変換

バグ

Re:変換方法について

#3

投稿記事 by バグ » 15年前

CStringとは、MFCのCStringクラスでしょうか?
もしそうであれば、GetBufferというメンバ関数を利用すればいいですよ。

たかぎ

Re:変換方法について

#4

投稿記事 by たかぎ » 15年前

CStringがMFCのものだとすると、Unicode版でコンパイルしていませんか?
Unicodeの場合、LPCTSTRはconst wchar_t*になるので、単純にはいきません。
もし、ASCIIの範囲しか使ってないのであれば...
CString cStr; 
std::string str((LPCTSTR)str, (LPCTSTR)str + str.Length());
とでもすればどうにかなると思います。

softya

Re:変換方法について

#5

投稿記事 by softya » 15年前

マルチバイト専用のCStringならCStringAがありますが代用可能でしょうか?
つまり、今CStringのところをCStringAに置き換えるって事ですが。この場合は、TEXT("")とか_T("")とか書いている部分を全部はずす必要が出てくるので面倒ですが、CStringとCStringAを使い分けできるのが便利です。
ただ、コンパイラの文字セットをマルチバイト文字に切り替えるほうがはるかに簡単ですけどね。

イネ

Re:変換方法について

#6

投稿記事 by イネ » 15年前

バグさん
>MFCのCStringクラスです。
たかぎさん、softyaさん
>Unicode版でコンパイルしていました。(VisualStudioのオプションをデフォルトのまま使用してましたので)
>おっしゃるとおり、_T();マクロをプログラム内で多用してましたので、文字セットを変えることで対応しました。


結果的には
文字セットをマルチバイト文字に切り替え、
CString cStr = "";
std::string str(cStr.GetBuffer());

で解決しました。
お答えくださった皆様、ありがとうございました。
文字コードの辺り、まだまだ理解が足りないなと痛感しました。

閉鎖

“C言語何でも質問掲示板” へ戻る