<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=MFC%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E6%96%87%E5%AD%97%E5%88%97</id>
	<title>MFCの基礎 - 文字列 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=MFC%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E6%96%87%E5%AD%97%E5%88%97"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=MFC%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E6%96%87%E5%AD%97%E5%88%97&amp;action=history"/>
	<updated>2026-07-04T20:53:45Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=MFC%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E6%96%87%E5%AD%97%E5%88%97&amp;diff=7947&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == &lt;br&gt;&lt;br&gt;  == 文字数の取得 == 文字セットがUnicodeまたはマルチバイトの場合において、文字列の文字数とバイト数を取得する。&lt;br&gt; &lt;br&gt; ここで、以下に示す文字列を前提とする。&lt;br&gt;  &lt;syntaxhighlight lang=&quot;c++&quot;&gt;  CString str = _T(&quot;123あいう&quot;);  // 文字列  int iLength;                  // 文字数  DWORD dwSize;                 // バイト数  &lt;/syntaxhighlight&gt; &lt;br&gt; 上記の文字列の変…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=MFC%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E6%96%87%E5%AD%97%E5%88%97&amp;diff=7947&amp;oldid=prev"/>
		<updated>2023-11-29T15:46:58Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;  == 文字数の取得 == 文字セットがUnicodeまたはマルチバイトの場合において、文字列の文字数とバイト数を取得する。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; ここで、以下に示す文字列を前提とする。&amp;lt;br&amp;gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;  CString str = _T(&amp;quot;123あいう&amp;quot;);  // 文字列  int iLength;                  // 文字数  DWORD dwSize;                 // バイト数  &amp;lt;/syntaxhighlight&amp;gt; &amp;lt;br&amp;gt; 上記の文字列の変…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 文字数の取得 ==&lt;br /&gt;
文字セットがUnicodeまたはマルチバイトの場合において、文字列の文字数とバイト数を取得する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ここで、以下に示す文字列を前提とする。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 CString str = _T(&amp;quot;123あいう&amp;quot;);  // 文字列&lt;br /&gt;
 int iLength;                  // 文字数&lt;br /&gt;
 DWORD dwSize;                 // バイト数&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
上記の文字列の変数iLengthは&amp;quot;6&amp;quot;であるが、以下の例のように記述する場合、&amp;lt;br&amp;gt;&lt;br /&gt;
変数iLengthは、Unicodeの場合&amp;quot;6&amp;quot;、マルチバイトの場合&amp;quot;9&amp;quot;となるため、マルチバイトの場合において目的の文字数が得ることができない。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 iLength = str.GetLength();&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
VC++の標準関数である&amp;lt;code&amp;gt;wctomb_s&amp;lt;/code&amp;gt;関数等を使用してもよいが、MFCでは&amp;lt;code&amp;gt;CStringW&amp;lt;/code&amp;gt;クラスを使用することもできる。&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例のように記述することにより、マルチバイト、Unicodeともに変数iLengthは&amp;quot;6&amp;quot;となり、正常に文字数を取得することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 CStringW strw;&lt;br /&gt;
 strw = str;&lt;br /&gt;
 iLength = strw.GetLength();&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;※注意&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;CStringW&amp;lt;/code&amp;gt;クラスのコンストラクタには、マルチバイトからUnicodeに変換する定義が無いため、宣言と同時に&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;演算子で初期化することはできない。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;コンストラタ処理後の&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;演算子(&amp;lt;code&amp;gt;operator=&amp;lt;/code&amp;gt;)においては、マルチバイトからUnicodeに変換する定義が存在するため、Unicode文字に変換することができる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 // OK&lt;br /&gt;
 CStringW strw;&lt;br /&gt;
 strw = str;&lt;br /&gt;
 &lt;br /&gt;
 // マルチバイトの場合は、コンパイルエラー&lt;br /&gt;
 // Unicodeの場合は、OK&lt;br /&gt;
 CStringW strw = str;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== バイト数の取得 ==&lt;br /&gt;
文字列のバイト数を取得する。&amp;lt;br&amp;gt;&lt;br /&gt;
これは、文字列をファイルへ保存する場合等に必要となる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 dwSize = str.GetLength();&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
文字数の取得とは逆で、変数dwSizeはUnicodeの場合は&amp;quot;6&amp;quot;、マルチバイトの場合は&amp;quot;9&amp;quot;となるため、Unicodeの場合、正常にバイト数を取得することができない。&amp;lt;br&amp;gt;&lt;br /&gt;
そこで、以下の例のように記述することにより、Unicodeおよびマルチバイトにおいて正常にバイト数を取得することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;TCHAR&amp;lt;/code&amp;gt;型はプレースホルダであり、&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sizeof(TCHAR)&amp;lt;/code&amp;gt;は、Unicodeの場合は&amp;lt;code&amp;gt;wchar_t&amp;lt;/code&amp;gt;型(2バイト)、マルチバイトの場合は&amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt;型(1バイト)になる。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 dwSize = str.GetLength() * sizeof(TCHAR);&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;※注意&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;文字セットがマルチバイトの場合、&amp;lt;code&amp;gt;CStringW&amp;lt;/code&amp;gt;クラスを使用すると正常にバイト数を取得することができない。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;さらに、文字セットがマルチバイトの場合、かつ、&amp;lt;code&amp;gt;CStringW&amp;lt;/code&amp;gt;クラスのバイト数を取得する場合、&amp;lt;code&amp;gt;sizeof(TCHAR)&amp;lt;/code&amp;gt;を乗算せずに、&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;を乗算することにより、正常なバイト数を取得することができる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:MFC]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>