【问题标题】:How to cast int digit to char without loosing digit value in c#如何将 int 数字转换为 char 而不会在 c# 中丢失数字值
【发布时间】:2013-08-31 19:39:51
【问题描述】:

Mabby 这是一个愚蠢的问题,但我怎样才能将 int 类型的数字转换为 char 类型的数字?

标准转换 OP 不这样做:

int x = 5;
char myChar = Convert.ToChar(5); // myChar is now a unicode character
char secondChar = (char)x; // again I get a unicode character, not a digit '5'

我需要这个,因为我有一个返回 CharIEnumerable 的方法,并且我需要以某种方式返回 ints 的集合。

例如:

int[] {1, 2, 3}  

转换成

char[] {'1', '2', '3'}  

在 C# 中可以做这样的转换吗?

【问题讨论】:

    标签: c# type-conversion


    【解决方案1】:

    在转换为 char 之前,将 48 添加到您的 int 值:

    char c = (char)(i + 48);
    

    或用于int[] -> char[] 转换:

    var source = new int[] { 1, 2, 3 };
    var results = source.Select(i => (char)(i + 48)).ToArray();
    

    它有效,因为ASCII table 中的'0' 字符具有48 值。但只有当您的 int 值介于 09 之间时,它才会起作用。

    【讨论】:

    • 为了清楚起见,char c = (char)(i + '0'); 怎么样?
    • @MatthewStrawbridge 很棒的评论。这将使代码更具可读性!
    【解决方案2】:
    var yourInts = new int[]{1,2,3};
    var result = yourInts.Select(x=>x.ToString()[0]).ToArray();
    

    【讨论】:

      【解决方案3】:

      如果您确定这些值在 0 .. 9 范围内(包括两者),则可以通过使用 按位或而不是加法来稍微提高效率:

      (char) ('0' <b>| i</b>);

      这是因为'0' 具有二进制代码点0011 0000,因此这十位数字都在0011 00000011 1001 之间。

      因此,您可以使用以下方法将 IEnumerable&lt;int&gt; 转换为 IEnumerable&lt;char&gt;

      data.Select(i =&gt; (char) ('0' <b>| i</b>));

      【讨论】:

        【解决方案4】:

        这应该有效: (char) (i + '0')

        示例: 变量 i = 8; var c = (char) (i + '0');//给出'8'

        【讨论】:

          猜你喜欢
          • 2020-03-29
          • 2012-07-16
          • 2016-02-20
          • 2016-06-01
          • 2011-09-30
          • 1970-01-01
          • 1970-01-01
          • 2020-03-18
          • 1970-01-01
          相关资源
          最近更新 更多