如何将char转换为int?

时间:2010-09-08 08:13:27

标签: c# .net

char转换为int的正确方法是什么? 这给出了49

int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works

我不想转换为字符串,然后解析它。

11 个答案:

答案 0 :(得分:274)

我很惊讶没有人提到内置于System.Char ...

的静态方法
int val = (int)Char.GetNumericValue('8');
// val == 8

答案 1 :(得分:38)

如何(对于char c

int i = (int)(c - '0');

减去char值?

重新提出API问题(评论),也许是一种扩展方法?

public static class CharExtensions {
    public static int ParseInt32(this char value) {
        int i = (int)(value - '0');
        if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
        return i;
    }
}

然后使用int x = c.ParseInt32();

答案 2 :(得分:19)

每个人都在伪造的是解释为什么会发生这种情况。

Char,基本上是一个整数,但在ASCII表中有一个指针。所有字符都有一个相应的整数值,您可以在尝试解析时清楚地看到它。

Pranay显然有不同的字符集,这就是为什么HIS代码不起作用。 唯一的方法是

int val = '1' - '0';

因为它在'0'表中查找整数值,然后是'基值' 从中减去char格式的数字将为您提供原始数字。

答案 3 :(得分:15)

int i = (int)char.GetNumericValue(c);

又一个选择:

int i = c & 0x0f;

这也应该做到这一点。

答案 4 :(得分:3)

int val = '1' - '0';

这可以使用ascii代码完成,其中'0'是最低的,数字字符从那里开始计数

答案 5 :(得分:3)

int val = '1' - 48;

答案 6 :(得分:3)

您可以使用以下扩展方法:

public static class CharExtensions
    {
        public static int CharToInt(this char c)
        {
            if (c < '0' || c > '9')
                throw new ArgumentException("The character should be a number", "c");

            return c - '0';
        }
    }

答案 7 :(得分:1)

实现此目的的最安全方法是使用Int32.TryParse方法。看这里: http://dotnetperls.com/int-tryparse

答案 8 :(得分:1)

int val = '1' & 15;

ASCII字符0-9的二进制文件是:

0 - 00110000

1 - 00110001

2 - 00110010

3 - 00110011

4 - 00110100

5 - 00110101

6 - 00110110

7 - 00110111

8 - 00111000

9 - 00111001

如果你把它们中的每一个接收到前4个LSB(使用按位AND和8'b00001111等于15)你得到实际数字(0000 = 0,0001 = 1,0010 = 2,... )

答案 9 :(得分:0)

包含十六进制表示的其他一些答案的扩展:

     public int CharToInt(char c) {
        if (c >= '0' && c <= '9') 
        {
            return c - '0';
        }
        else if (c >= 'a' && c <= 'f') 
       {
            return 10 + c - 'a';
        }
        else if (c >= 'A' && c <= 'F') 
        {
            return 10 + c - 'A';
        }

        return -1;
     }

答案 10 :(得分:0)

您可以尝试这样的事情:

int val = Convert.ToInt32("" + '1');