Converteer char naar int in C#

Ik heb een char in c#:

char foo = '2';

Nu wil ik de 2 in een int. Ik vind dat Convert.ToInt32 de werkelijke decimale waarde van de char retourneert en niet het getal 2. Het volgende zal werken:

int bar = Convert.ToInt32(new string(foo, 1));

int.parse werkt ook alleen op strings.

Is er geen native functie in C# om van een char naar int te gaan zonder er een string van te maken? Ik weet dat dit triviaal is, maar het lijkt gewoon vreemd dat er niets native is om de conversie direct uit te voeren.


Antwoord 1, autoriteit 100%

Interessante antwoorden, maar de documenten zeggen iets anders:

Gebruik de GetNumericValuemethoden om
converteer een Charobject dat staat voor
een getal naar een numeriek waardetype. Gebruik maken van
Parseen TryParseom a . te converteren
teken in een tekenreeks in een Char
object. Gebruik ToStringom een ​​Char. te converteren
object naar een Stringobject.

http://msdn.microsoft.com/en-us/ library/system.char.aspx


Antwoord 2, autoriteit 94%

Dit zal het converteren naar een int:

char foo = '2';
int bar = foo - '0';

Dit werkt omdat elk teken intern wordt vertegenwoordigd door een nummer. De tekens ‘0’ tot ‘9’ worden weergegeven door opeenvolgende cijfers, dus het vinden van het verschil tussen de tekens ‘0’ en ‘2’ resulteert in het getal 2.


Antwoord 3, autoriteit 52%

Heeft iemand overwogen om int.Parse()en int.TryParse()op deze manier te gebruiken

int bar = int.Parse(foo.ToString());

Zo nog beter

int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
    //Do something to correct the problem
}

Het is een stuk veiliger en minder foutgevoelig


Antwoord 4, autoriteit 15%

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

en je kunt er een statische methode van maken:

static int ToInt(this char c)
{
    return (int)(c - '0');
}

Antwoord 5, autoriteit 8%

Probeer dit

char x = '9'; // '9' = ASCII 57
int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9

Antwoord 6, autoriteit 5%

Standaard gebruik je UNICODE, dus ik raad aan om de methode van faulty te gebruiken

int bar = int.Parse(foo.ToString());

Ook al zijn de numerieke waarden eronder hetzelfde voor cijfers en eenvoudige Latijnse tekens.


Antwoord 7, autoriteit 3%

De echte manier is:

int theNameOfYourInt = (int).Char.GetNumericValue(theNameOfYourChar);

“theNameOfYourInt” – de int waarnaar u wilt dat uw char wordt getransformeerd.

“theNameOfYourChar” – De Char die u wilt gebruiken, zodat deze wordt omgezet in een int.

Laat de rest met rust.


Antwoord 8, autoriteit 3%

Principe:

char foo = '2';
int bar = foo & 15;

Het binaire bestand van de ASCII-tekens 0-9 is:

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

en als je elk van hen de eerste 4 LSB neemt (met bitsgewijze AND met 8’b00001111 dat gelijk is aan 15), krijg je het werkelijke aantal (0000 = 0,0001=1.0010=2,… )

Gebruik:

public static int CharToInt(char c)
{
    return 0b0000_1111 & (byte) c;
}

Antwoord 9, autoriteit 3%

Ik ben het eens met @Chad Grant

Ook goed als je converteert naar string, dan kun je die waarde als numeriek gebruiken zoals gezegd in de vraag

int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2

Ik heb geprobeerd een eenvoudiger en begrijpelijker voorbeeld te maken

char v = '1';
int vv = (int)char.GetNumericValue(v); 

char.GetNumericValue(v) retourneert als dubbel en converteert naar (int)

Meer geavanceerd gebruik als array

int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();

Antwoord 10

Ik gebruik Compact Framework 3.5 en heb geen “char.Parse”-methode.
Ik denk dat het niet slecht is om de Convert-klasse te gebruiken. (Zie 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);

Werkt met ASCII-teken of Unicode-teken


Antwoord 11

Vergelijking van enkele methoden op basis van het resultaat wanneer het teken geen ASCII-cijfer is:

char c1 = (char)('0' - 1), c2 = (char)('9' + 1); 
Debug.Print($"{c1 & 15}, {c2 & 15}");                                   // 15, 10
Debug.Print($"{c1 ^ '0'}, {c2 ^ '0'}");                                 // 31, 10
Debug.Print($"{c1 - '0'}, {c2 - '0'}");                                 // -1, 10
Debug.Print($"{(uint)c1 - '0'}, {(uint)c2 - '0'}");                     // 4294967295, 10
Debug.Print($"{char.GetNumericValue(c1)}, {char.GetNumericValue(c2)}"); // -1, -1

Antwoord 12

Converteer het teken eerst naar een tekenreeks en converteer het vervolgens naar een geheel getal.

var character = '1';
var integerValue = int.Parse(character.ToString());

Antwoord 13

Gebruik dit:

public static string NormalizeNumbers(this string text)
{
    if (string.IsNullOrWhiteSpace(text)) return text;
    string normalized = text;
    char[] allNumbers = text.Where(char.IsNumber).Distinct().ToArray();
    foreach (char ch in allNumbers)
    {
        char equalNumber = char.Parse(char.GetNumericValue(ch).ToString("N0"));
        normalized = normalized.Replace(ch, equalNumber);
    }
    return normalized;
}

Antwoord 14

Dit werkte voor mij:

int bar = int.Parse("" + foo);

Antwoord 15

Ik heb veel antwoorden gezien, maar ze lijken me verwarrend. Kunnen we niet gewoon Type Casting gebruiken.

Bijvoorbeeld:-

int s;
char i= '2';
s = (int) i;

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes