[C#] C # char a int


Answers

Risposte interessanti ma i documenti dicono in modo diverso:

Utilizzare i metodi GetNumericValue per convertire un oggetto Char che rappresenta un numero in un tipo di valore numerico. Usa Parse e TryParse per convertire un carattere in una stringa in un oggetto Char . Utilizzare ToString per convertire un oggetto Char in un oggetto String .

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

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.




Questo ha funzionato per me:

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



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.




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




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.




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 



Il vero modo è:

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

"theNameOfYourInt" - int vuoi che il tuo char venga trasformato in.

"theNameOfYourChar" - Il Char che vuoi utilizzare per trasformarlo in un int.

Lascia tutto il resto essere.




Prova questo

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

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



Questo converte in un numero intero e gestisce l'unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

Puoi leggere di più here .




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

Per esempio: -

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



Qualcuno ha considerato l'utilizzo di int.Parse() e int.TryParse() come questo

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

Ancora meglio così

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

È molto più sicuro e meno incline agli errori




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

Il binario dei caratteri 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 prendi ognuno di loro i primi 4 LSB (usando bit per bit AND con 8'b00001111 che equivale a 15) ottieni il numero effettivo (0000 = 0,0001 = 1,0010 = 2, ...)




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');
}