[C#] C # char a int


Answers

Questo lo convertirà in un int:

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

Questo funziona perché ogni personaggio è internamente rappresentato da un numero. I caratteri da "0" a "9" sono rappresentati da numeri consecutivi, quindi trovare la differenza tra i caratteri "0" e "2" risulta nel numero 2.

Question

Quindi ho un carattere in C #:

char foo = '2';

Ora voglio ottenere il 2 in un int. Trovo che Convert.ToInt32 restituisce il valore decimale effettivo del char e non il numero 2. Quanto segue funzionerà:

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

int.parse funziona solo su stringhe.

Non esiste una funzione nativa in C # per passare da un char a un int senza renderlo una stringa? So che questo è banale ma sembra strano che non ci sia nulla di nativo nel fare direttamente la conversione.




Confronto di alcuni dei metodi basati sul risultato quando il carattere non è una cifra 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 



Ho visto molte risposte ma mi sembrano confuse. Non possiamo semplicemente usare Type Casting.

Per esempio: -

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



Per impostazione predefinita si utilizza UNICODE, quindi suggerisco di utilizzare il metodo di errore

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

Anche se i valori numerici sotto sono gli stessi per cifre e caratteri latini di base.




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

e puoi creare un metodo statico al di fuori di esso:

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



Sto usando Compact Framework 3.5 e non ho un metodo "char.Parse". Penso che non sia male usare la classe Convert. (Vedi CLR tramite 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);

Funziona con char ASCII o char Unicode