我在c#中有一个char:

char foo = '2';

现在我想把2变成一个整型。我发现皈依。ToInt32返回该字符的实际十进制值,而不是数字2。以下是可行的方法:

int bar = Convert.ToInt32(new string(foo, 1));

int。解析也只适用于字符串。

c#中没有本地函数可以在不使其成为字符串的情况下从char转换为int吗?我知道这是微不足道的,但这似乎很奇怪,没有本地直接进行转换。


当前回答

试试这个

char x = '9'; // '9' = ASCII 57

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9

其他回答

这将把它转换为int型:

char foo = '2';
int bar = foo - '0';

这是可行的,因为每个字符在内部都由一个数字表示。字符“0”到“9”由连续的数字表示,因此找出字符“0”和“2”之间的差值,结果是数字2。

我同意@Chad Grant的观点

同样正确,如果你转换为字符串,那么你可以使用该值作为问题中所说的数字

int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2

我试图创建一个更简单易懂的例子

char v = '1';
int vv = (int)char.GetNumericValue(v); 

char.GetNumericValue(v)返回double值并转换为(int)

作为数组的更高级用法

int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();

用这个:

public static string NormalizeNumbers(this string text)
{
    if (string.IsNullOrWhiteSpace(text)) return text;

    string normalized = text;

    char[] allNumbers = text.Where(char.IsNumber).Distinct().ToArray();

    foreach (char ch in allNumbers)
    {
        char equalNumber = char.Parse(char.GetNumericValue(ch).ToString("N0"));
        normalized = normalized.Replace(ch, equalNumber);
    }

    return normalized;
}

真正的方法是:

int theNameOfYourInt = (int).Char.GetNumericValue(theNameOfYourChar);

" namameofyourint " -你想要你的char被转换成的int。

" namameofyourchar " -你想要使用的Char,因此它将被转换为int型。

其他的都不要管。

这将转换为整数并处理unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

你可以在这里阅读更多。