Pergunta
Eu tenho um char em c #:
char foo = '2';
Agora eu quero obter a 2 em um int. Acho que Convert.ToInt32 retorna o valor decimal real do carvão e não o número 2. A seguir irá funcionar:
int bar = Convert.ToInt32(new string(foo, 1));
int.parse só funciona em cordas também.
Não há nenhuma função nativa em C # para ir de um char para int sem torná-lo uma corda? Eu sei que isso é trivial, mas ele só parece estranho que não há nada nativa para diretamente fazer a conversão.
Solução
respostas interessantes, mas os médicos dizem de forma diferente:
Use os métodos
GetNumericValue
para converter um objecto que representaChar
um número de um tipo de valor numérico. UsarParse
eTryParse
para converter um caractere em uma string em umChar
objeto. UseToString
para converter umChar
objeto para um objetoString
.
http://msdn.microsoft.com/en-us/ biblioteca / system.char.aspx
Outras dicas
Isto irá convertê-lo em um int:
char foo = '2';
int bar = foo - '0';
Isso funciona porque cada personagem é representado internamente por um número. O caracteres '0' a '9' são representados por números consecutivos, de modo a encontrar a diferença entre os resultados dos caracteres '0' e '2' no número 2.
Alguém já pensou em usar int.Parse()
e int.TryParse()
como este
int bar = int.Parse(foo.ToString());
Mesmo melhor assim
int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
//Do something to correct the problem
}
É muito mais seguro e menos propenso 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 Este
char x = '9'; // '9' = ASCII 57
int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9
Por padrão, você usar UNICODE então eu sugiro usar o método de defeito
int bar = int.Parse(foo.ToString());
Mesmo que os valores numéricos menores são as mesmas para dígitos e caracteres latinos básicos.
Isto converte para um inteiro e alças unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
Você pode ler mais aqui .
O verdadeiro caminho é:
int theNameOfYourInt = (int) .Char.GetNumericValue (theNameOfYourChar);
"theNameOfYourInt." - o int você quer que seu char para ser transformado para
"theNameOfYourChar." - The Char você quiser ser usado por isso vai ser transformado em um int
Deixe tudo ser.
Princípio:
char foo = '2';
int bar = foo & 15;
O binário dos charecters 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
e se você tomar em cada um deles o primeiro 4 LSB (usando bit a bit E com 8'b00001111 que é igual a 15), obtém o número real (0000 = 0,0001 = 1,0010 = 2, ... )
Uso:
public static int CharToInt(char c)
{
return 0b0000_1111 & (byte) c;
}
Comparação de alguns dos métodos com base no resultado quando o personagem 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
Eu estou usando Compact Framework 3.5, e não tem um método "char.Parse". Eu acho que não é ruim usar a classe 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 caractere ASCII ou Unicode caractere
Estou de acordo com @Chad Grant
Além disso certo, se você converter para string, então você pode usar esse valor como numérico como disse na pergunta ??p>
int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2
Eu tentei criar uma forma mais simples e compreensível exemplo
char v = '1';
int vv = (int)char.GetNumericValue(v);
char.GetNumericValue (v) retorna como casal e convertidos para (int)
Mais Advenced uso como uma matriz
int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();
Eu vi muitas respostas, mas eles parecer confuso para mim. Não podemos simplesmente usar Tipo Casting.
Por ex: -
int s;
char i= '2';
s = (int) i;
Isso funcionou para mim:
int bar = int.Parse("" + foo);