So erhalten Sie ein Zeichen aus einem ASCII-Zeichencode in c #

74

Ich versuche, eine Datei in c # zu analysieren, deren Feld- (Zeichenfolgen-) Arrays durch die ASCII-Zeichencodes 0, 1 und 2 getrennt sind (in Visual Basic 6 können Sie diese mithilfe von Chr (0) oder Chr (1) usw. generieren.)

Ich weiß, dass Sie für den Zeichencode 0 in c # Folgendes tun können:

char separator = '\0';

Aber das funktioniert nicht für die Zeichencodes 1 und 2?

Jimbo
quelle

Antworten:

145

Zwei Optionen:

char c1 = '\u0001';
char c1 = (char) 1;
Jon Skeet
quelle
2
Was ist mit char sep = '\ x32'; ?
Ngoozeff
3
@ngoozeff: Ich mag es \xaus verschiedenen Gründen nicht und würde nicht empfehlen, es zu verwenden.
Jon Skeet
7
LOL - Es macht mich deprimiert, Ihnen noch MEHR Punkte zu geben, Jon, aber trotzdem danke für die Antwort: P
Jimbo
22
Wahrscheinlich für alle klar - aber nur um es explizit zu sagen. Bei der ersten Option in dieser Antwort ist die Zahl der hexadezimale Zeichencode. Bei der zweiten Option handelt es sich um eine Dezimalstelle. Offensichtlich 1 (dezimal) = 1 (hex), aber für höhere Codes ist es nicht! zB: char c = '\u0021'ist äquivalent zu char c = (char)33ist äquivalent zu char c = '!'
James S
36

Sie können einfach schreiben:

char c = (char) 2;

oder

char c = Convert.ToChar(2);

oder komplexere Option nur für die ASCII-Codierung

char[] characters = System.Text.Encoding.ASCII.GetChars(new byte[]{2});
char c = characters[0];
Pavel Morshenyuk
quelle
1
Angesichts der Tatsache, dass es sich um zwei spezifische Werte handelt, die kleiner als 128 sind, scheint die letztere Option unnötig langwierig zu sein. Unicode wurde entwickelt, um mit ASCII übereinzustimmen.
Jon Skeet
1
Es ist gut, wenn Sie mehr als 1 Byte oder ein Array konvertieren möchten.
Danon
22

Es ist wichtig zu beachten, dass in C # der Zeichentyp als Unicode UTF-16 gespeichert ist.

Von der ASCII-äquivalenten Ganzzahl zu char

char c = (char)88;

oder

char c = Convert.ToChar(88)

Von char zu ASCII äquivalenter Ganzzahl

int asciiCode = (int)'A';

Das Literal muss ASCII-äquivalent sein. Zum Beispiel:

string str = "Xสีน้ำเงิน";
Console.WriteLine((int)str[0]);
Console.WriteLine((int)str[1]);

wird gedruckt

X
3626

Erweiterte ASCII-Bereiche reichen von 0 bis 255.

Vom Standard-UTF-16-Literal bis zum Zeichen

Verwenden des Symbols

char c = 'X';

Verwenden des Unicode-Codes

char c = '\u0058';

Hexadezimal verwenden

char c = '\x0058';
Carlos Caldas
quelle