我在c#中有一个char:

char foo = '2';

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

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

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

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


当前回答

我使用的是Compact Framework 3.5,没有“char”。解析”方法。 我认为使用Convert类还不错。(参见《CLR via c#》,Jeffrey Richter)

char letterA = Convert.ToChar(65);
Console.WriteLine(letterA);
letterA = 'あ';
ushort valueA = Convert.ToUInt16(letterA);
Console.WriteLine(valueA);
char japaneseA = Convert.ToChar(valueA);
Console.WriteLine(japaneseA);

适用于ASCII字符或Unicode字符

其他回答

我见过很多答案,但我觉得很困惑。我们不能简单地使用类型转换吗?

例:-

int s;
char i= '2';
s = (int) i;

我同意@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();

默认情况下使用UNICODE,所以我建议使用faulty的方法

int bar = int. parse (foo.ToString());

尽管下面的数值对于数字和基本拉丁字符是相同的。

这招对我很管用:

int bar = int.Parse("" + foo);

我使用的是Compact Framework 3.5,没有“char”。解析”方法。 我认为使用Convert类还不错。(参见《CLR via c#》,Jeffrey Richter)

char letterA = Convert.ToChar(65);
Console.WriteLine(letterA);
letterA = 'あ';
ushort valueA = Convert.ToUInt16(letterA);
Console.WriteLine(valueA);
char japaneseA = Convert.ToChar(valueA);
Console.WriteLine(japaneseA);

适用于ASCII字符或Unicode字符