【问题标题】:C# - Are type conversions (numbers to char) made based on ASCII values?C# - 是否基于 ASCII 值进行类型转换(数字到字符)?
【发布时间】:2017-12-14 06:02:42
【问题描述】:

我是 C# 新手,我正在尝试更多地了解数据类型和转换。我有以下控制台程序:

using System;

namespace First_lesson
{
    class Program
    {
        static void Main(string[] args)
        {
            char singleLetter = 'B';
            short num = 291;
            Console.WriteLine("{0} {1}", num, singleLetter);


            singleLetter = Convert.ToChar(num);
            Console.WriteLine(singleLetter);
            Console.WriteLine("{0} {1}", sizeof(short), sizeof(char));

        }
    }
}

我不明白为什么,当我将 num 转换为 char 时,我得到一个小写 g 而不是主题标签符号 #。 p>

转换不是基于 ASCII 值吗?

【问题讨论】:

  • 这个Convert.ToChar满足你吗:msdn.microsoft.com/en-us/library/3hkfdkcx(v=vs.110).aspx
  • "将指定的 32 位有符号整数的值转换为其等效的 Unicode 字符。" - 转换最终基于 UTF-16 编码。
  • char 是一个 UTF-16 代码单元。 UTF-16 是Unicode 字符集的编码。 char 的范围从 0 到 0xffff,所以我不明白为什么你会期望 291 映射 '#'。

标签: c# types char type-conversion short


【解决方案1】:

Convert.ToChar 返回具有指定数值的char(UTF-16 代码单元)。

291(十进制)与0x123(十六进制)相同,因此Convert.ToChar(291) 返回一个包含character U+0123char,它是带有CEDILLA 的拉丁小写字母G,即ģ

当您将其打印到非 Unicode 控制台时,重音被去除,而是打印一个 ASCII g

【讨论】:

    【解决方案2】:

    char 关键字用于声明 System.Char 结构的实例,.NET Framework 使用它来表示 Unicode 字符。 Char 对象的值是 16 位数字(序数)值。

    实际上,一个字符代表一个Unicode 字符。十进制的35是#符号的表示

    public static void Main()
    {
        char singleLetter = 'B';
        short num = 35;
        Console.WriteLine("{0} {1}", num, singleLetter);
    
        singleLetter = Convert.ToChar(num);
        Console.WriteLine(singleLetter);
        Console.WriteLine("{0} {1}", sizeof(short), sizeof(char));
        Console.ReadLine();
    }
    

    试试这个:

    short singleLetter = Convert.ToInt16('B');
    Console.WriteLine(singleLetter);
    

    B66 十进制值 您可以使用this 页面作为Unicode 表的参考

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-08
      • 2011-10-03
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2017-09-11
      相关资源
      最近更新 更多