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.
Ich bin überrascht, dass niemand die statische Methode in System.Char
... erwähnt hat.
int val = (int)Char.GetNumericValue('8');
// val == 8
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();
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.
int i = (int)char.GetNumericValue(c);
Noch eine andere Option:
int i = c & 0x0f;
Dies sollte auch dies erreichen.
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
int val = '1' - 48;
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';
}
}
Der sicherste Weg, dies zu erreichen, ist die Verwendung der Methode Int32.TryParse. Siehe hier: http://dotnetperls.com/int-tryparse
Sie können so etwas versuchen:
int val = Convert.ToInt32("" + '1');
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;
}
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, ...)