我在c#中有一个字符:

char foo = '2';

现在我想把2变成一个int。我发现Convert.ToInt32返回char的实际十进制值而不是数字2.以下将起作用:

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

int.parse也适用于字符串。

C#中没有本机函数可以从char转到int而不使其成为字符串吗?我知道这是微不足道的,但似乎很奇怪,直接进行转换没有任何原生的东西。

有帮助吗?

解决方案

有趣的答案,但文档说的不同:

  

使用 GetNumericValue 方法   转换代表的 Char 对象   一个数字到数值类型。使用    Parse TryParse 转换一个   将字符串中的字符转换为 Char   宾语。使用 ToString 转换 Char   对象为 String 对象。

http://msdn.microsoft.com/en-us/库/ system.char.aspx

其他提示

这会将其转换为int:

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

这是有效的,因为每个字符在内部由数字表示。字符“0”到“9”由连续的数字表示,因此找到字符“0”和“2”之间的差异会得到数字2.

是否有人考虑过使用 int.Parse() int.TryParse()这样

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

更像这样

int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
    //Do something to correct the problem
}

它更安全,更不容易出错

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

你可以用它创建一个静态方法:

static int ToInt(this char c)
{
    return (int)(c - '0');
}

试试这个

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

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

默认情况下你使用UNICODE所以我建议使用错误的方法

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

即使数字和基本拉丁字符下面的数字值相同。

这会转换为整数并处理unicode

<代码> CharUnicodeInfo.GetDecimalDigitValue( '2')

您可以阅读更多此处

真正的方法是:

  

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

&QUOT; theNameOfYourInt&QUOT; - 你希望你的char被转换为的int。

&QUOT; theNameOfYourChar&QUOT; - 你想要使用的字符,因此它将被转换为int。

保留其他所有内容。

<强>原理:

char foo = '2';
int bar = foo & 15;

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

0   -   0011 0000
1   -   0011 0001
2   -   0011 0010
3   -   0011 0011
4   -   0011 0100
5   -   0011 0101
6   -   0011 0110
7   -   0011 0111
8   -   0011 1000
9   -   0011 1001

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

<强>用法:

public static int CharToInt(char c)
{
    return 0b0000_1111 & (byte) c;
}

当字符不是ASCII数字时,基于结果的一些方法的比较:

char c = '\n';                              
Debug.Print(<*>quot;{c & 15}");                   // 10
Debug.Print(<*>quot;{c ^ 48}");                   // 58
Debug.Print(<*>quot;{c - 48}");                   // -38
Debug.Print(<*>quot;{(uint)c - 48}");             // 4294967258
Debug.Print(<*>quot;{char.GetNumericValue(c)}");  // -1 

我正在使用Compact Framework 3.5,而没有“char.Parse”。方法。 我认为使用Convert类也不错。 (参见CLR通过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 char或Unicode char

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

更多Advenced用作数组

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

我见过很多答案,但他们似乎对我很困惑。我们不能只是简单地使用Type Casting。

例如: -

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

这对我有用:

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