Ich habe ein Zeichen in c #:
char foo = '2';
Jetzt möchte ich die 2 in ein int bringen. Ich finde, dass Convert.ToInt32 den tatsächlichen Dezimalwert des Zeichens und nicht die Zahl 2 zurückgibt. Folgendes wird funktionieren:
int bar = Convert.ToInt32(new string(foo, 1));
int.parse funktioniert auch nur mit Strings.
Gibt es in C # keine native Funktion, um von einem Zeichen zu einem Int zu wechseln, ohne daraus einen String zu machen? Ich weiß, dass dies trivial ist, aber es scheint nur seltsam, dass es nichts Natives gibt, um die Konvertierung direkt durchzuführen.
char.GetNumericValue('¼')
ergibt 0,25. Die Freuden von Unicode ... ;-)char
,int
ohnestring
vorher zu verwenden.Dadurch wird es in ein int konvertiert:
Dies funktioniert, weil jedes Zeichen intern durch eine Zahl dargestellt wird. Die Zeichen '0' bis '9' werden durch fortlaufende Zahlen dargestellt. Wenn Sie also den Unterschied zwischen den Zeichen '0' und '2' ermitteln, erhalten Sie die Zahl 2.
quelle
char
ist immer UTF-16.Hat jemand darüber nachgedacht, dies zu verwenden
int.Parse()
und zuint.TryParse()
mögen?Noch besser so
Es ist viel sicherer und weniger fehleranfällig
quelle
'0'
vom Zeichen angesehen wird.und Sie können daraus eine statische Methode erstellen:
quelle
Versuche dies
quelle
'9'
, aber Ihr Code hat9
, der nicht kompiliert werden kann.Standardmäßig verwenden Sie UNICODE, daher empfehle ich die Verwendung der fehlerhaften Methode
int bar = int.Parse(foo.ToString());
Obwohl die numerischen Werte unter für Ziffern und grundlegende lateinische Zeichen gleich sind.
quelle
Dies wird in eine Ganzzahl konvertiert und behandelt Unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
Sie können mehr lesen hier .
quelle
Der wahre Weg ist:
"theNameOfYourInt" - das int, in das Ihr Zeichen umgewandelt werden soll.
"theNameOfYourChar" - Das Zeichen, das Sie verwenden möchten, damit es in ein int umgewandelt wird.
Lass alles andere sein.
quelle
Prinzip:
Die Binärdatei der ASCII-Zeichen 0-9 lautet:
und wenn Sie in jedem von ihnen die ersten 4 LSB (mit bitweisem UND mit 8'b00001111, was 15 entspricht) aufnehmen, erhalten Sie die tatsächliche Zahl (0000 = 0,0001 = 1,0010 = 2, ...)
Verwendung:
quelle
Ich bin mit @Chad Grant einverstanden
Auch richtig, wenn Sie in einen String konvertieren, können Sie diesen Wert als numerisch verwenden, wie in der Frage angegeben
Ich habe versucht, ein einfacheres und verständlicheres Beispiel zu erstellen
char.GetNumericValue (v) gibt als double zurück und konvertiert in (int)
Mehr Erweiterte Verwendung als Array
quelle
Vergleich einiger Methoden basierend auf dem Ergebnis, wenn das Zeichen keine ASCII-Ziffer ist:
quelle
Ich verwende Compact Framework 3.5 und habe keine "char.Parse" -Methode. Ich denke, es ist nicht schlecht, die Convert-Klasse zu verwenden. (Siehe CLR über C #, Jeffrey Richter)
Funktioniert mit ASCII-Zeichen oder Unicode-Zeichen
quelle
Das hat bei mir funktioniert:
quelle
int.Parse(foo.ToString())
, außer dass es weniger lesbar ist?Ich habe viele Antworten gesehen, aber sie scheinen mir verwirrend. Können wir nicht einfach Type Casting verwenden?
Zum Beispiel: -
quelle