C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列の型変換) |
(→文字列の型変換) |
||
1,592行: | 1,592行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | _bstr_t型からの変換に関するサンプルを追加しました。 | |
− | + | 型変換とは関係ない部分になりますが、配列のサイズ確保処理について補足しておきますと、文字列配列の大きさは動的に生成した文字列配列からは取得することはできません。動的に生成したときの大きさをプログラマ自身が管理する必要があります。そのことを知ることができるのが上記の64行目のprintf文です。ここで動的に生成した文字列配列の大きさをsizeof関数で表示していますが、配列の大きさは64bitPCならば、要素数2つなので8byte(64bit 8bit=1byte)になるはずですが、4byteになっています。これはポインタ変数の大きさ、アドレス記憶変数ひとつ分の大きさになっていて、実際の配列サイズが返ってこないことが確認できます。 | |
+ | |||
+ | 話は戻って… | ||
+ | |||
+ | 上記のように変換を進めていて気づくことですが、それぞれの型は取り扱える文字コード長が異なります。_bstr_tやCComBSTRはマルチバイト文字とワイド文字の両方に対応していて、プロジェクト設定にしたがって記憶する文字型を切り替えています。CStringAはマルチバイト文字、CStringWはワイド文字です。stringとSystem::Stringはマルチバイト文字を扱うようになっています。したがって、変換時にはマルチバイト文字、ワイド文字変換が必要になるケースと必要ないケース。あるいは、プロジェクトの設定によって決まるケースがあるわけです。そのことから、_bstr_tやCComBSTを利用しておくという、ある程度、文字列の世界を熟知している人だけが選ぶ道があるようにも思えるわけです。マイクロソフトの容易したものを使うにしても賢い選択というのが、その時代、時代によって存在することになります。 | ||
+ | |||
+ | 開発するプログラムの枠組みによってはマルチバイトやワイド文字といった切り替えは気にしないという人もいるのかもしれません。具体的にどのように変換処理を記述するかについても、そのときそのときで違ってくることもあるのかもしれませんね。 | ||
+ | |||
+ | 変換の種類がたくさんありますが、wchar_tとcharの変換をおぼえれば、それぞれの特殊な型をchar型に変換する手法とcharからそれぞれの型に変換する手法をマスターすれば、変換手順は長くなる可能性があるものの、とにかくすべてを網羅できるわけです。特殊な型から特殊な型へのダイレクトな変換は覚えなくてもなんとかなる。覚えた方が楽になる。そんな感じです。それぞれの人の考え方にあわせて、覚える量を調節すれば済む話です。 | ||
+ | |||
+ | マイクロソフトの説明書にも簡単な変換に関する文書があります。 | ||
+ | http://msdn.microsoft.com/ja-jp/library/ms235631(v=vs.110).aspx | ||
+ | |||
+ | ここに記述している内容とさほど差はありません。わかりやすい方を参考にしてみて下さい。 | ||
+ | |||
+ | では引き続き、変換のサンプルを… | ||
<syntaxhighlight lang="cpp" line start="1"> | <syntaxhighlight lang="cpp" line start="1"> | ||
2,577行: | 2,592行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | と、こんな感じです。もっと効率の良い変換があったらごめんなさい。動的に必要最小限のメモリを確保させながらの処理だとこんな感じになるよっていう例になっていると思います。プログラムによっては、配列の大きさを固定したっていいわけです。その方がコーディングや変数管理が楽になる場合もあります。この章に関しては以上です。既に準備されている型の変換なんてのは、変換するための関数が準備されているので、比較的簡単な技術になります。全角半角変換や文字コード変換処理を実際に組む方が難しいかもしれません。それもおいおい記述したいと思います。 | |
※2014/09/21 ここまでで、疲れたから、また暫くオヤスミ。次に気が向くのはいつになるのか、誰も知らない。 | ※2014/09/21 ここまでで、疲れたから、また暫くオヤスミ。次に気が向くのはいつになるのか、誰も知らない。 |