HOWTO · Csharp
C# で Int を Char に変換する
このチュートリアルでは、C# で int を char にキャストする方法を説明します。
このページの内容
C# では、整数が何を表すかに基づいて変換を選択します。char の範囲内の値をキャストする、Convert.ToChar() を使ってチェック付きの変換を行う、Char.ConvertFromUtf32() を使って Unicode コード ポイントを変換する、または ToString()[0] を使って非負整数の最初の 10 進数字を読む、といった方法があります。これらの操作は異なる結果を返すため、数字の抽出は一般的な整数から文字への変換ではありません。以下の例はここでは実行されません。そのコードは各操作を示すために提供されています。
C# の char は 1 つの UTF-16 コード単位を格納します。0 から 65535 までの値を保持できますが、一部の Unicode 文字には 2 つのコード単位が必要です。入力が 1 つの char に収まることを意図した値ではなく Unicode コード ポイントである場合は、文字列を返すメソッドを使用してください。
明示的なキャストで C# の int を char にキャストする
明示的なキャストは、整数値を char に変換します。102 のような値の場合、対応する UTF-16 コード単位は f を表します。char は 1 つの UTF-16 コード単位であるため、このキャストはすべての Unicode コード ポイントを完全な文字に変換するわけではありません。補助コード ポイントには 2 つのコード単位が必要であり、1 つの char には収まりません。チェック付きコンテキストでは、範囲外の数値変換がチェックされます。チェックなしコンテキストでは、変換は下位 16 ビットを保持します。直接の対応付けが必要な場合は、入力を char の範囲内に保ってください。
using System;
public class Program
{
public static void Main()
{
int value = 102;
char character = (char)value;
Console.WriteLine($"(char){value} is {character}");
}
}
Convert.ToChar() で C# の int を char に変換する
Convert.ToChar() は、char の範囲内(0 から 65535)の整数を char に変換します。その範囲外の int については、OverflowException をスローします。明示的なキャストに頼るのではなく範囲をチェックしたい場合は、このメソッドを選択してください。返される値は依然として単一の UTF-16 コード単位であり、すべての Unicode コード ポイントに対する完全な表現ではありません。
using System;
public class Program
{
public static void Main()
{
int value = 65;
char character = Convert.ToChar(value);
Console.WriteLine($"Convert.ToChar({value}) is {character}");
}
}
Char.ConvertFromUtf32() で C# の Unicode コード ポイントを変換する
整数が Unicode コード ポイントを表す場合、Char.ConvertFromUtf32() はその UTF-16 表現を含む文字列を返します。有効な Unicode スカラー値を受け入れます。サロゲート範囲内の値と U+10FFFF を超える値は有効な入力ではありません。補助範囲のコード ポイントは 2 つの char 値で表されるため、返される文字列(その最初の要素だけではありません)が完全な文字表現となります。整数が Unicode コード ポイントを識別し、そのテキスト表現が必要な場合に適した選択です。
using System;
public class Program
{
public static void Main()
{
int codePoint = 0x1F600;
string character = Char.ConvertFromUtf32(codePoint);
Console.WriteLine(character);
}
}
ToString() で C# の int の最初の 10 進数字を取得する
value.ToString()[0] は、整数の 10 進テキストの最初の文字を取得します。数値を、その値が表す文字に変換するわけではありません。80 のような非負値の場合、その文字は数字 8 です。負の値の場合、最初の文字は符号であるため、この式は数字を返しません。既知の非負整数について、書かれた最初の数字を調べることが目的の場合にのみ使用してください。すべての数字を処理する必要がある場合は、値を文字列のままにするか、そのタスクに適した数値操作を使用してください。
using System;
public class Program
{
public static void Main()
{
int value = 80;
char firstCharacter = value.ToString()[0];
Console.WriteLine($"value.ToString()[0] is {firstCharacter}");
}
}
C# で適切な int から char への変換を選ぶ
- 整数が 1 つの
charコード単位に直接対応することを意図した値である場合は、明示的なキャストを使用します。 - 値を
charの範囲に対してチェックすべき場合は、Convert.ToChar()を使用します。 - 整数が有効な Unicode コード ポイントであり、結果に複数の UTF-16 コード単位が必要になる可能性がある場合は、
Char.ConvertFromUtf32()を使用し、返される文字列をそのまま保持します。 ToString()[0]は、非負整数から最初の 10 進数字文字を取得するためにのみ使用します。
これらのメソッドは異なるタスクを解決します。キャストと Convert.ToChar() は 1 つの char を返し、Char.ConvertFromUtf32() は Unicode コード ポイントに対する文字列を返し、ToString()[0] は書式設定された 10 進テキストから文字を読み取ります。