MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MFCの基礎 - 文字列のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MFCの基礎 - 文字列
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == 文字数の取得 == 文字セットがUnicodeまたはマルチバイトの場合において、文字列の文字数とバイト数を取得する。<br> <br> ここで、以下に示す文字列を前提とする。<br> <syntaxhighlight lang="c++"> CString str = _T("123あいう"); // 文字列 int iLength; // 文字数 DWORD dwSize; // バイト数 </syntaxhighlight> <br> 上記の文字列の変数iLengthは"6"であるが、以下の例のように記述する場合、<br> 変数iLengthは、Unicodeの場合"6"、マルチバイトの場合"9"となるため、マルチバイトの場合において目的の文字数が得ることができない。<br> <syntaxhighlight lang="c++"> iLength = str.GetLength(); </syntaxhighlight> <br> VC++の標準関数である<code>wctomb_s</code>関数等を使用してもよいが、MFCでは<code>CStringW</code>クラスを使用することもできる。<br> 以下の例のように記述することにより、マルチバイト、Unicodeともに変数iLengthは"6"となり、正常に文字数を取得することができる。<br> <syntaxhighlight lang="c++"> CStringW strw; strw = str; iLength = strw.GetLength(); </syntaxhighlight> <br> <u>※注意</u><br> <u><code>CStringW</code>クラスのコンストラクタには、マルチバイトからUnicodeに変換する定義が無いため、宣言と同時に<code>=</code>演算子で初期化することはできない。</u><br> <u>コンストラタ処理後の<code>=</code>演算子(<code>operator=</code>)においては、マルチバイトからUnicodeに変換する定義が存在するため、Unicode文字に変換することができる。</u><br> <syntaxhighlight lang="c++"> // OK CStringW strw; strw = str; // マルチバイトの場合は、コンパイルエラー // Unicodeの場合は、OK CStringW strw = str; </syntaxhighlight> <br><br> == バイト数の取得 == 文字列のバイト数を取得する。<br> これは、文字列をファイルへ保存する場合等に必要となる。<br> <br> <syntaxhighlight lang="c++"> dwSize = str.GetLength(); </syntaxhighlight> <br> 文字数の取得とは逆で、変数dwSizeはUnicodeの場合は"6"、マルチバイトの場合は"9"となるため、Unicodeの場合、正常にバイト数を取得することができない。<br> そこで、以下の例のように記述することにより、Unicodeおよびマルチバイトにおいて正常にバイト数を取得することができる。<br> <br> <code>TCHAR</code>型はプレースホルダであり、<br> <code>sizeof(TCHAR)</code>は、Unicodeの場合は<code>wchar_t</code>型(2バイト)、マルチバイトの場合は<code>char</code>型(1バイト)になる。<br> <syntaxhighlight lang="c++"> dwSize = str.GetLength() * sizeof(TCHAR); </syntaxhighlight> <br> <u>※注意</u><br> <u>文字セットがマルチバイトの場合、<code>CStringW</code>クラスを使用すると正常にバイト数を取得することができない。</u><br> <u>さらに、文字セットがマルチバイトの場合、かつ、<code>CStringW</code>クラスのバイト数を取得する場合、<code>sizeof(TCHAR)</code>を乗算せずに、<code>2</code>を乗算することにより、正常なバイト数を取得することができる。</u><br> <br><br> __FORCETOC__ [[カテゴリ:MFC]]
MFCの基礎 - 文字列
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse