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

提供: yonewiki
移動: 案内, 検索
(文字列の型変換)
(文字列の型変換)
1,095行: 1,095行:
  
 
=='''文字列の型変換'''==
 
=='''文字列の型変換'''==
文字列の型にはchar/*char(LPSTR)、WCHAR/*WCHAR(LPWSTR)、TCHAR/*TCHAR(LPTSTR)がありました。これに変更できない文字列としてconst付きで定義された文字列がありました。これらの型に収められた文字列を相互にやり取りする手法について考えようと思います。文字列操作自体はどれか一つの型を採用するのですが、誰かが作ったクラスやDLLはどの文字列の型を採用しているかはわかりません。あらゆる型から、目的の型に変換できないと、ひとつの型に統一して文字列を操作するということができないので、必須の知識になると思います。そもそもcharやWCHARやTCHARの違いとは何だったのか?覚えていますか?charはマルチバイト文字列、WCHARはワイド文字列、TCHARはプロジェクトの設定に従うマルチバイトあるいはワイド文字列でした。さらに復習しておくと、マルチバイトってのは全角文字を扱うときUnicodeではなくJISコードを拡張した日本語JISコードであり、Windowsならばマイクロソフトが提供しているCP932という文字コードセットで英数字は1バイト、全角文字は2バイトで表される文字、一方、ワイド文字ってのは、UnicodeでUTF-16という方式で英数、日本語は常に2バイトで表現される文字列です(あまり使わない諸外国の文字では4バイトになることもありますが…)。扱う文字コードの違いにより、変数に格納された数値の扱いが異なるため、それぞれの型は動作が異なるため、単純に代入するだけではだめです。だったら最初から代入するような表現だけで変換できるような仕組みを作ってくれれば良かったのですが、そうもいかないようです。そして、ここまで述べてきた型にマイクロソフトが独自に提供しているMFCで定義しているCStringからの変換についても考えておきたいと思います。ほかにも独自に考えられた文字列型があれば、その独自の文字列型からの変換についても熟知する必要がありますが、独自の文字列型を提供している人や提供を受けた人が変換について考えれば良いので、ここでは有名どころだけを網羅することにします。というわけでひとつづつ変換をやってみます。
+
文字列の型にはchar/*char(LPSTR)、WCHAR/*WCHAR(LPWSTR)、TCHAR/*TCHAR(LPTSTR)がありました。これに変更できない文字列としてconst付きで定義された文字列がありました。これらの型に収められた文字列を相互にやり取りする手法について考えようと思います。文字列操作自体はどれか一つの型を採用するのですが、誰かが作ったクラスやDLLはどの文字列の型を採用しているかはわかりません。あらゆる型から、目的の型に変換できないと、ひとつの型に統一して文字列を操作するということができないので、必須の知識になると思います。そもそもcharやWCHARやTCHARの違いとは何だったのか?覚えていますか?charはマルチバイト文字列、WCHARはワイド文字列、TCHARはプロジェクトの設定に従うマルチバイトあるいはワイド文字列でした。さらに復習しておくと、マルチバイトってのは全角文字を扱うときUnicodeではなくJISコードを拡張した日本語JISコードであり、Windowsならばマイクロソフトが提供しているCP932という文字コードセットで英数字は1バイト、全角文字は2バイトで表される文字、一方、ワイド文字ってのは、UnicodeでUTF-16という方式で英数、日本語は常に2バイトで表現される文字列です(あまり使わない諸外国の文字では4バイトになることもありますが…)。扱う文字コードの違いにより、変数に格納された数値の扱いが異なるため、それぞれの型は動作が異なるため、単純に代入するだけではだめです。だったら最初から代入するような表現だけで変換できるような仕組みを作ってくれれば良かったのですが、そうもいかないようです。そして、ここまで述べてきた型にマイクロソフトが独自に提供しているMFCで定義しているCString(マルチバイトのCStringA、ワイドのCStringW)からの変換や_bstr_t、CComBSTR、basic_string、System::Stringについても考えておきたいと思います。ほかにも独自に考えられた文字列型があれば、その独自の文字列型からの変換についても熟知する必要がありますが、独自の文字列型を提供している人や提供を受けた人が変換について考えれば良いので、ここでは有名どころだけを網羅することにします。マイクロソフトが提供している文字列型の詳細については以下のとおりです。
 +
 
 +
_bstr_t COM(Component Object Model アプリケーション同士のやりとりをするための技術)サポートクラス BSTR型の文字列クラス<br />
 +
http://msdn.microsoft.com/ja-jp/library/zthfhkd6.aspx<br />
 +
プリプロセッサ:comutil.h<br />
 +
ライブラリ:comsuppw.lib または comsuppwd.lib<br />
 +
BSTR型の解説:http://msdn.microsoft.com/ja-jp/library/ms221069.aspx<br />
 +
特徴:文字列長を常に保有し続けるBSTR型文字列のための文字列クラス<br />
 +
 
 +
CComBSTR ATL(Active Template Library MFCの小型版と思っていいと思います。)として提供されるBSTR型の文字列クラス<br />
 +
http://msdn.microsoft.com/ja-jp/library/zh7x9w3f.aspx<br />
 +
 
 +
basic_string 文字列テンプレートSTL(Standard Template Library ANSI標準テンプレートのライブラリ。)<br />
 +
http://msdn.microsoft.com/ja-jp/library/syxtdd4f.aspx<br />
 +
 
 +
System::String C++/CLI(Common Language Infrastructure)の文字列型<br />
 +
http://msdn.microsoft.com/ja-jp/library/system.string(v=vs.110).aspx<br />
 +
 
 +
MFC STL COM ATL CLIと短い略称ですが、それぞれは膨大なライブラリでして、その技術の応用についても、本当は知っていく必要がありますが、ActiveXやらDirectXやらと言い出したらきりがないほど情報技術は歴史が深いし、細かい。Webサービス、SOAP、ネットワーク、暗号化、セキュア…鬼のように沢山の既存技術がある。結構使われてる。ここで触れようとしていること自体もかなり多いけど、それでも、その中のほんの一部に過ぎない。
 +
 
 +
というわけで、これくらいできて当然という変換をやってみます。
  
 
=='''文字列文字コード変換'''==
 
=='''文字列文字コード変換'''==

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



個人用ツール
名前空間

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