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バイトで表現される文字列です。扱う文字コードの違いにより、変数に格納された数値の扱いが異なるため、それぞれの型は動作が異なるため、単純に代入するだけではだめです。だったら最初から代入するような表現だけで変換できるような仕組みを作ってくれれば良かったのですが、そうもいかないようです。というわけでひとつづつ変換をやってみます。
+
文字列の型には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バイトになることもありますが…)。扱う文字コードの違いにより、変数に格納された数値の扱いが異なるため、それぞれの型は動作が異なるため、単純に代入するだけではだめです。だったら最初から代入するような表現だけで変換できるような仕組みを作ってくれれば良かったのですが、そうもいかないようです。というわけでひとつづつ変換をやってみます。
  
 
=='''文字列文字コード変換'''==
 
=='''文字列文字コード変換'''==

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



個人用ツール
名前空間

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