How to convert char to int?

2020-01-23 05:04发布

What is the proper way to convert a char to int? This gives 49:

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

I don't want to convert to string and then parse it.

标签: c# .net
11条回答
该账号已被封号
2楼-- · 2020-01-23 05:16

An extension of some other answers that covers hexadecimal representation:

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;
}
查看更多
Fickle 薄情
3楼-- · 2020-01-23 05:18

how about (for char c)

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

which does substraction of the char value?

Re the API question (comments), perhaps an extension method?

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;
    }
}

then use int x = c.ParseInt32();

查看更多
The star\"
4楼-- · 2020-01-23 05:18
int val = '1' - 48;
查看更多
家丑人穷心不美
5楼-- · 2020-01-23 05:18
int val = '1' & 15;

The binary of the ASCII charecters 0-9 is:

0   -   00110000

1   -   00110001

2   -   00110010

3   -   00110011

4   -   00110100

5   -   00110101

6   -   00110110

7   -   00110111

8   -   00111000

9   -   00111001

and if you take in each one of them the first 4 LSB(using bitwise AND with 8'b00001111 that equels to 15) you get the actual number (0000 = 0,0001=1,0010=2,... )

查看更多
6楼-- · 2020-01-23 05:19

The most secure way to accomplish this is using Int32.TryParse method. See here: http://dotnetperls.com/int-tryparse

查看更多
Viruses.
7楼-- · 2020-01-23 05:21
int val = '1' - '0';

This can be done using ascii codes where '0' is the lowest and the number characters count up from there

查看更多
登录 后发表回答