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.

Foi útil?

Solução

respostas interessantes, mas os médicos dizem de forma diferente:

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

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

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top