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.

War es hilfreich?

Lösung

Interessante Antworten, aber die docs sagen anders:

  

die GetNumericValue Methoden an, um   ein Char Objekt konvertiert, der darstellt,   eine Zahl in einen numerischen Wert Typen. Verwenden   Parse und TryParse konvertieren ein   Zeichen in einer Zeichenkette in eine Char   Objekt. Verwenden Sie ToString eine Char zu konvertieren   Objekt zu einem String 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top