it-swarm.com.de

Wie konvertiere ich char in int?

Was ist der richtige Weg, eine char in int zu konvertieren? Dies gibt 49:

int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works

Ich möchte nicht in einen String konvertieren und ihn dann analysieren.

118
tvr

Ich bin überrascht, dass niemand die statische Methode in System.Char... erwähnt hat.

int val = (int)Char.GetNumericValue('8');
// val == 8
271
Joel Mueller

wie wäre es mit (für char c)

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

was ist eine Subtraktion des Char-Werts?

Zu der API-Frage (Kommentare) vielleicht eine Erweiterungsmethode?

public static class CharExtensions {
    public static int ParseInt32(this char value) {
        int i = (int)(value - '0');
        if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
        return i;
    }
}

dann benutze int x = c.ParseInt32();

38
Marc Gravell

Was alle vergessen, erklärt, warum dies geschieht. 

Ein Zeichen ist im Grunde eine ganze Zahl, jedoch mit einem Zeiger in der Tabelle ASCII. Alle Zeichen haben einen entsprechenden ganzzahligen Wert, wie Sie beim Parsen deutlich sehen können. 

Pranay hat eindeutig einen anderen Zeichensatz, deshalb funktioniert KIS-Code nicht. Der einzige Weg ist 

int val = '1' - '0';

weil dies den ganzzahligen Wert in der Tabelle von '0' nachschlägt, der dann der 'Basiswert' ist.

19
Stefanvds
int i = (int)char.GetNumericValue(c);

Noch eine andere Option:

int i = c & 0x0f;

Dies sollte auch dies erreichen.

15
Grif
int val = '1' - '0';

Dies kann unter Verwendung von ASCII-Codes erfolgen, wobei '0' die niedrigste ist und die Anzahl der Zeichen von dort hochzählt

3
Tristan
int val = '1' - 48;
3
x2.

Sie können die folgende Erweiterungsmethode verwenden:

public static class CharExtensions
    {
        public static int CharToInt(this char c)
        {
            if (c < '0' || c > '9')
                throw new ArgumentException("The character should be a number", "c");

            return c - '0';
        }
    }
3
Eugene Cheverda

Der sicherste Weg, dies zu erreichen, ist die Verwendung der Methode Int32.TryParse. Siehe hier: http://dotnetperls.com/int-tryparse

1
MUG4N

Sie können so etwas versuchen:

int val = Convert.ToInt32("" + '1');
0
Crasher

Eine Erweiterung einiger anderer Antworten, die die hexadezimale Darstellung abdeckt:

     public int CharToInt(char c) {
        if (c >= '0' && c <= '9') 
        {
            return c - '0';
        }
        else if (c >= 'a' && c <= 'f') 
       {
            return 10 + c - 'a';
        }
        else if (c >= 'A' && c <= 'F') 
        {
            return 10 + c - 'A';
        }

        return -1;
     }
0
int val = '1' & 15;

Die Binärdatei der ASCII - Zeichen 0-9 ist:

0 - 00110000

1 - 00110001

2 - 00110010

3 - 00110011

4 - 00110100

5 - 00110101

6 - 00110110

7 - 00110111

8 - 00111000

9 - 00111001

und wenn Sie in jedem von ihnen die ersten 4 LSBs (mit bitweisem AND mit 8'b00001111 = 15) verwenden, erhalten Sie die tatsächliche Zahl (0000 = 0,0001 = 1,0010 = 2, ...)

0
Tomer Wolberg