C# の文字型 (char)

C# の文字型

C# の文字型変数は char 型として作成します。char 型は 2 バイトのデータ型であり、 Unicode の基本多言語面 (BMP) の文字一文字分を変数一つで表せます。

文字データは ' で囲み表記します。文字を直接書く代わりに、Unicode (UTF-16) の符号で値をセットすることもできます。

符号で文字を表す場合は \u または \x でエスケープして 16 進数の値で書きます。 例えば A という文字の Unicode の符号 (コードポイント) は U+0041 ですが、この場合 '\u0041' という文字で A になります。

char c1 = 'A';
char c2 = '\u0041';
Console.WriteLine($"{c1}, {c2}"); // A, A

対応する .NET 型は System.Char です。次の方法で、.NET 型の名前やサイズを確認できます。

char ch = 'A';
int size = sizeof(char);
Console.WriteLine($"{ch}"); // A
Console.WriteLine($"{ch.GetType().FullName}"); // System.Char
Console.WriteLine($"{size}"); // 2

C# 文字のエスケープシーケンス

次の文字を表すにはバックスラッシュを付けてエスケープして記述します。

エスケープシーケンス 意味
\' 引用符
\" 二重引用符
\\ バックスラッシュ
\0 NULL
\a アラート
\b バックスペース
\f 書式送り
\n 改行
\r キャリッジリターン
\t 水平タブ文字
\v 垂直タブ文字
\xXXXX または \uXXXX 16進数の文字コード

C# の char 型は int 型にキャスト可能

char 型の値は int 型に直接キャストできて、数値として認識されます。

このため、次のように文字コードを確認することもできます。

char ch = 'A';
int m = ch;
Console.WriteLine($"{m:X4}"); // 0041

また、次のコードのように文字コードをインクリメントすることで、A から Z まで順番に出力することなどができます。

for (char ch = 'A'; ch <= 'Z'; ch++)
{
  Console.Write($"{ch}"); 
  // ABCDEFGHIJKLMNOPQRSTUVWXYZ
}

char 型 2 個で 1 文字となる場合

UTF-16 では SMP (補助多言語面) にある文字は、サロゲートペアを構成する 4 バイトで符号化することになっています。

UTF-16 等の説明については当サイト内の Java 入門の記事 「Java の文字型 (char)」をご覧ください。 Java の記事ですが Unicode の説明については C# でも同様です。

char[] a = new char[2];
a[0] = '\xD83E';
a[1] = '\xDD23';
string s = new string(a);
Console.WriteLine($"{s}");

実行結果は次の Emoji が表示されます。

また逆に Emoji をセットして、その長さなどを表示すると次のようになります。

実行結果は次の通り一文字セットしただけでも、文字列長は 2 となっています。

2
D83E DD23

また char の値を出力すると、確かにハイサロゲート、ローサロゲートの値が確認できます。

以上、C# の char 型について説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門