Converter char em int em c #

Eu tenho um caractere em c #:

char foo = '2'; 

Agora quero colocar o 2 em um int. Eu acho que Convert.ToInt32 retorna o valor decimal real do char e não o número 2. O seguinte irá funcionar:

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

int.parse só funciona em strings também.

Não há nenhuma function nativa em C # para ir de um char para int sem torná-lo uma string? Eu sei que isso é trivial, mas parece estranho que não exista nada nativo para fazer a conversão diretamente.

Respostas interessantes, mas os documentos dizem de forma diferente:

Use os methods GetNumericValue para converter um object Char que representa um número em um tipo de valor numérico. Use Parse e TryParse para converter um caractere em uma string em um object Char . Use ToString para converter um object Char em um object String .

http://msdn.microsoft.com/pt-br/library/system.char.aspx

Isso irá convertê-lo para um int:

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

Isso funciona porque cada caractere é representado internamente por um número. Os caracteres ‘0’ a ‘9’ são representados por números consecutivos, portanto, encontrar a diferença entre os caracteres ‘0’ e ‘2’ resulta no número 2.

Alguém já pensou em usar int.Parse() e int.TryParse() assim

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

Ainda melhor assim

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

É muito mais seguro e menos sujeito a erros

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

e você pode criar um método estático com isso:

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

Tente isto

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

Por padrão, você usa UNICODE, então sugiro usar o método defeituoso

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

Mesmo que os valores numéricos abaixo sejam os mesmos para dígitos e caracteres latinos básicos.

Isso converte em um inteiro e manipula unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

Você pode ler mais aqui .

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

O binário dos caracteres ASCII 0-9 é:

0 – 00110000

1 – 00110001

2 – 00110010

3 – 00110011

4 – 00110100

5 – 00110101

6 – 00110110

7 – 00110111

8 – 00111000

9 – 00111001

e se você pegar em cada um deles os primeiros 4 LSB (usando bit a bit AND com 8’b00001111 que equivale a 15) você obtém o número real (0000 = 0,0001 = 1,0010 = 2, …)

Comparação de alguns dos methods baseados no resultado quando o caractere não é um dígito ASCII:

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

Estou usando o Compact Framework 3.5 e não tem um método “char.Parse”. Eu acho que não é ruim usar a class Convert. (Veja 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); 

Funciona com char ASCII ou char Unicode

O caminho real é:

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

“theNameOfYourInt” – o int que você quer que seu char seja transformado.

“theNameOfYourChar” – O Char você quer ser usado para que seja transformado em um int.

Deixe todo o resto ser.

Isso funcionou para mim:

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

Eu vi muitas respostas, mas elas parecem confusas para mim. Não podemos simplesmente usar Type Casting?

Por ex: –

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