簡體   English   中英

如何將char轉換為int?

[英]How to convert char to int?

char轉換為int的正確方法是什么? 這給出了49

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

我不想轉換為字符串然后解析它。

我很驚訝沒有人提到System.Char內置的靜態方法......

int val = (int)Char.GetNumericValue('8');
// val == 8

怎么樣(對於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();

每個人都忘記的是解釋為什么會發生這種情況。

Char,基本上是一個整數,但在 ASCII 表中有一個指針。 所有字符都有一個相應的整數值,您在嘗試解析它時可以清楚地看到。

Pranay 顯然有不同的字符集,這就是為什么他的代碼不起作用。 唯一的辦法是

int val = '1' - '0';

因為這會查找'0'表中的整數值,然后是“基值”,從中減去您的字符格式的數字,將為您提供原始數字。

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

還有一個選擇:

int i = c & 0x0f;

這也應該實現這一點。

int val = '1' - '0';

這可以使用 ascii 代碼來完成,其中 '0' 是最低的,數字字符從那里開始計數

int val = '1' - 48;

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

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

最安全的方法是使用 Int32.TryParse 方法。 請參閱此處: http : //dotnetperls.com/int-tryparse

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,...)

涵蓋十六進制表示的其他一些答案的擴展:

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

你可以嘗試這樣的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM