C 文字列操作 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(文字列の型変換)
(文字列の型変換)
1,282行: 1,282行:
 
//printf("string %s\n",basicstring[i].c_str());
 
//printf("string %s\n",basicstring[i].c_str());
 
   }
 
   }
  }
+
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
上から<br />
 +
char(LPSTR)→TCHAR(LPCTSTR)<br />
 +
TCHAR(LPCTSTR)→char(LPSTR)<br />
 +
の変換ここでは#ifndef UNICODEディレクティブによりTCHARの扱いをプロジェクトでどのように定義したか?によって動作が切り替わるように処理を組み込んでいます。以前に記述したサンプル[[C 日本語文字列#マルチバイト文字列、ワイド文字列の相互変換]]では、そこまでは言及していませんでした。プロジェクトの設定の文字セットでunicode文字セットを使用するに設定していれば、上側の#ifndef UNICODEから#elseまでに囲まれた部分が処理される。変換が必要かどうか?確認するのがよいです。<br />
 +
その次に<br />
 +
charから_bstr_tやCComBSTRやCStringA、CStringWのような変換について記述しています。このあたりの変数はchar型のポインタを代入するだけで変換をしてくれます。但し、出力するときには少し工夫が必要になります。これはどちらかというと、独自の文字列クラスの仕様によるものなので、それぞれの文字クラスについて学習を進める必要があります。先に示したリンクからそれぞれのクラスについて学習してみて下さい。こちらのサイトでもいつかは触れていきたいですが、まだまだ先になりそうです。<br />
 +
それから、<br />
 +
charからstring、System::Stringへの変換について記述しています。<br />
 +
System::Stringは共通言語ランタイムですので、動作させるにはプロジェクトの設定を変更しないといけません。<br />
 +
しかも、設定を変更しても従来のC言語の記法と共通言語ランタイムの記法を混同させるとVisual C++のコードインテリジェンス機能が完全停止しますのでコード編集が大変になりますので、このサンプルのような混同したプリプロセッサ定義をして無理やり、いろいろな変換のサンプルを記述するのは良くないです。複数の文字列プリプロセッサを混同しないのが本来のやりかたになります。System::Stringへのchar変数の代入だけは複数の処理ステップが必要になります。System::String用に準備されているメソッドがconst char*の引数に対応していなかったり、独自の仕組みでしか引数をとることができないからです。ちなみに、文字列の配列でなければ、もう少し簡単に変換ができて、<br />
 +
System::String ^systemstring = gcnew String(char*型変数);<br />
 +
のように記述するだけで、コンストラクタの初期値によって変換自体は完了させることができます。と、ここまでchar型からの変換だけで、ずいぶんと長い説明になってしまいました。このあたりの配列を使った場合の文字列変換についてまとめている文書は意外と少ないと思います。
  
※2014/08/24 ここまでで、疲れたから、また暫くオヤスミ。次に気が向くのはいつになるのか、誰も知らない。
+
 
 +
※2014/08/30 ここまでで、疲れたから、また暫くオヤスミ。次に気が向くのはいつになるのか、誰も知らない。
  
 
=='''文字列文字コード変換'''==
 
=='''文字列文字コード変換'''==

2014年8月30日 (土) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス