HOWTO · Csharp

C# 将 Int 转换为 Char

本教程教授如何在 C# 中将 int 转换为 char。

本页内容

在 C# 中,应根据整数所表示的含义来选择转换方式:将 char 范围内的值进行强制转换、使用 Convert.ToChar() 进行带检查的转换、使用 Char.ConvertFromUtf32() 处理 Unicode 码点,或使用 ToString()[0] 读取非负整数的第一个十进制数字。这些操作返回的结果各不相同,因此提取数字并不是一种通用的整数到字符的转换。下面的示例在此处并未执行;提供其代码是为了展示每种操作。

C# 的 char 存储一个 UTF-16 代码单元。它可以保存 0 到 65535 之间的值,但某些 Unicode 字符需要两个代码单元。如果你的输入是一个 Unicode 码点,而不是打算装入单个 char 的值,请使用返回字符串的方法。

在 C# 中使用显式强制转换将 int 转换为 char

显式强制转换将整数值转换为 char。对于 102 这样的值,对应的 UTF-16 代码单元表示 f。char 是一个 UTF-16 代码单元,因此这种强制转换不会把每个 Unicode 码点都变成一个完整的字符。增补码点需要两个代码单元,无法装入单个 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}");
    }
}

在 C# 中使用 Convert.ToChar() 将 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}");
    }
}

在 C# 中使用 Char.ConvertFromUtf32() 转换 Unicode 码点

当整数表示一个 Unicode 码点时,Char.ConvertFromUtf32() 会返回一个包含其 UTF-16 表示的字符串。它接受有效的 Unicode 标量值:代理项范围内的值以及大于 U+10FFFF 的值不是有效的输入。增补范围内的码点由两个 char 值表示,因此返回的字符串——而不仅仅是它的第一个元素——才是完整的字符表示。当整数标识一个 Unicode 码点且你需要其文本表示时,这是合适的选择。

using System;

public class Program
{
    public static void Main()
    {
        int codePoint = 0x1F600;
        string character = Char.ConvertFromUtf32(codePoint);
        Console.WriteLine(character);
    }
}

在 C# 中使用 ToString() 获取 int 的第一个十进制数字

value.ToString()[0] 获取整数十进制文本中的第一个字符;它并不将数值转换为该值所表示的字符。对于 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 转换

  • 当整数是一个打算直接映射到一个 char 代码单元的值时,使用显式强制转换。
  • 当值应针对 char 范围进行检查时,使用 Convert.ToChar()。
  • 当整数是一个有效的 Unicode 码点且结果可能需要多个 UTF-16 代码单元时,使用 Char.ConvertFromUtf32();请保持返回的字符串完整。
  • 仅使用 ToString()[0] 从非负整数中获取第一个十进制数字字符。

这些方法解决的是不同的任务:强制转换和 Convert.ToChar() 返回单个 char,Char.ConvertFromUtf32() 为 Unicode 码点返回一个字符串,而 ToString()[0] 从格式化后的十进制文本中读取一个字符。