Frage
Ich habe einen char in C #:
char foo = '2';
Jetzt möchte ich die 2 in einen int erhalten. Ich finde, dass Convert.ToInt32 den tatsächlichen Dezimalwert der char zurückgibt und nicht die Nummer 2. Folgende funktioniert:
int bar = Convert.ToInt32(new string(foo, 1));
int.Parse funktioniert nur als auch auf Zeichenfolge.
Gibt es keine native Funktion in C # aus einem char zu gehen, ohne int es einem String zu machen? Ich weiß, das ist trivial, aber es scheint nur seltsam, dass es nichts heimisch direkt die Umwandlung zu machen.
Lösung
Interessante Antworten, aber die docs sagen anders:
die
GetNumericValue
Methoden an, um einChar
Objekt konvertiert, der darstellt, eine Zahl in einen numerischen Wert Typen. VerwendenParse
undTryParse
konvertieren ein Zeichen in einer Zeichenkette in eineChar
Objekt. Verwenden SieToString
eineChar
zu konvertieren Objekt zu einemString
Objekt.
http://msdn.microsoft.com/en-us/ Bibliothek / system.char.aspx
Andere Tipps
Dies konvertiert es in ein int:
char foo = '2';
int bar = foo - '0';
Das funktioniert, weil jedes Zeichen intern durch eine Ziffer dargestellt wird. Das Zeichen ‚0‘ bis ‚9‘ durch aufeinanderfolgende Zahlen dargestellt werden, so dass die Differenz zwischen den ‚0‘ Zeichen zu finden und ‚2‘ ergibt die Zahl 2.
Hat jemand betrachtet int.Parse()
und int.TryParse()
wie dies mit
int bar = int.Parse(foo.ToString());
Noch besser ist wie folgt
int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
//Do something to correct the problem
}
Es ist viel sicherer und weniger fehleranfällig
char c = '1';
int i = (int)(c-'0');
und Sie können eine statische Methode aus ihm heraus erstellen:
static int ToInt(this char c)
{
return (int)(c - '0');
}
Versuchen Sie diese
char x = '9'; // '9' = ASCII 57
int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9
Standardmäßig Sie UNICODE verwenden, so dass ich mit fehlerhafter Methode vorschlagen
int bar = int.Parse(foo.ToString());
Auch wenn die numerischen Werte unter sind die gleichen für Ziffern und lateinische Grund Zeichen.
Dieser wandelt auf eine ganze Zahl und Griffe Unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
Sie können mehr lesen hier .
Der wahre Weg ist:
int theNameOfYourInt = (int) .Char.GetNumericValue (theNameOfYourChar);
"theNameOfYourInt" - der int Sie Ihre char umgewandelt werden
."theNameOfYourChar." - Der Char Sie verwendet werden soll, so wird es in ein int umgewandelt werden
Lassen Sie alles andere sein.
Prinzip:
char foo = '2';
int bar = foo & 15;
Die binäre der ASCII charecters 0-9 ist:
0 - 0011 0000
1 - 0011 0001
2 - 0011 0010
3 - 0011 0011
4 - 0011 0100
5 - 0011 0101
6 - 0011 0110
7 - 0011 0111
8 - 0011 1000
9 - 0011 1001
, und wenn Sie in jedem von ihnen nehmen die ersten 4 LSB (mit bitweise AND mit 8'b00001111, die bis 15 ist gleich) Sie erhalten die tatsächliche Anzahl (0000 = 0,0001 = 1,0010 = 2, ... )
Verwendung:
public static int CharToInt(char c)
{
return 0b0000_1111 & (byte) c;
}
Vergleich einige der Methoden, basierend auf dem Ergebnis, wenn das Zeichen nicht um eine ASCII-Ziffer ist:
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
Ich bin mit Compact Framework 3.5, und nicht eine "char.Parse" Methode hat. Ich denke nicht schlecht ist, die Convert-Klasse zu verwenden. (Siehe CLR via 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);
Arbeitet mit ASCII-Zeichen oder Unicode-Zeichen
Ich bin einverstanden mit @Chad Grants
Auch richtig, wenn Sie auf Zeichenfolge konvertieren, dann können Sie diesen Wert als numerisches verwenden, wie in der Frage genannte
int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2
Ich habe versucht, ein einfaches und verständliches Beispiel erstellen
char v = '1';
int vv = (int)char.GetNumericValue(v);
char.GetNumericValue (v) kehrt als Doppel und konvertiert bis (int)
Weitere Advenced Verwendung als Array
int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();
Ich habe viele Antworten gesehen, aber sie scheinen verwirrend für mich. Kann nicht nur einfach Type Casting verwenden wir.
Für die Ex: -
int s;
char i= '2';
s = (int) i;
Das funktioniert für mich:
int bar = int.Parse("" + foo);