業務中に困ったので備忘録がてら。
ファイル出力を行うのに、文字列変換をしたかったのですが……
毎回毎回やる度に忘れてググります(笑)
ので、今回はその備忘録がてらに……
char* → std::string
char c[] = "abc"; std::string ss = std::string(c);
そのまま引数で渡したものを代入してあげればよい。
char* → System::String^
char c[] = "abc"; System::String^ sm = gcnew System::String(c);
System::Stringは、コンストラクタでchar*をサポートしているようなので、生成時に渡してあげればいいだけだった。
MSDNを見る限り、コンストラクタで渡して生成できるのは、「char」と「SByte」とのことなので、バイト列の文字列は対応してるよってことですかね。
std::string → System::String^
std::string ss = "abc";
System::String^ sm = gcnew System::String(ss.c_str());
c_str()というのは
C 言語での文字列表現を取得する。
引用:basic_string::c_str - cpprefjp C++日本語リファレンス
というものです。
前述したchar→System::Stringの関係的にも、charに変換してあげれば、少なくともSystem::Stringは対応できるということになりますね。
そう考えると「変換どうすれば!」という悩みが少し楽に解決できるような気がしますね。
int等からSystem::String
数値型等から変換するとき、一番手っ取り早いのが
int num = 999; System::String ss = "" + num;
だと思います。
System::Stringは「=」で代入、「+」で繋がる
System::Stringは
System::String ss = "";
と、文字列を直接代入してあげることができます。
更にこの文字列が「+」でつなぐことで、文字列連結を容易に行うことができます。
Sytem::String ss1 = "abc"; Sytem::String ss2 = "def"; Sytem::String ret = ss1 + ss2; // "abcdef"
またこの連結は、数値型を連結してもそのまま文字列として組み込んでくれます。
Sytem::String ss = "abc"; int num = 123; Sytem::String ret = ss + num; // "abc123"
これだけでログ吐きとかかなり捗ります。
あとがき
いかがでしたでしょうか?
自分に必要なもの+αという、かなり備忘録的な内容なので、対応しているものが少ないですが……
多少なりともお役に立てたら幸いです。
C++というか、C++CLIがかもしれませんが、文字列型って取り扱いがたくさんあって面倒なんですよね……
そのうち一覧とか作れたらいいなぁ…とか密かに思ってます(笑)