lisz-works

技術系だけど関係ないこと多い系ブログ

C++CLIでログ出力の為にした文字列→文字列変換

【スポンサーリンク】

プログラムのソースコード

業務中に困ったので備忘録がてら。

ファイル出力を行うのに、文字列変換をしたかったのですが……

毎回毎回やる度に忘れてググります(笑)

ので、今回はその備忘録がてらに……

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がかもしれませんが、文字列型って取り扱いがたくさんあって面倒なんですよね……

そのうち一覧とか作れたらいいなぁ…とか密かに思ってます(笑)