如何从C#中的ASCII字符代码获取字符


76

我试图在c#中解析一个文件,该文件具有由ascii字符代码0、1和2分隔的字段(字符串)数组(在Visual Basic 6中,您可以使用Chr(0)或Chr(1)等生成这些文件)

我知道对于C#中的字符代码0,您可以执行以下操作:

char separator = '\0';

但这不适用于字符代码1和2?

Answers:


149

两种选择:

char c1 = '\u0001';
char c1 = (char) 1;

2
那么char sep ='\ x32'; ?
ngoozeff

3
@ngoozeff:\x由于各种原因,我不喜欢,并且不建议使用它。
乔恩·斯基特

7
大声笑-这让我很沮丧,无法给你更多的琼恩积分,但无论如何还是感谢您的回答:P
Jimbo,2010年

22
可能所有人都清楚-但要明确。在此答案的第一个选项中,数字是十六进制的字符代码。在第二个选项中,它是一个小数。显然1(十进制)= 1(十六进制),但是对于更高的代码则不是!例如:char c = '\u0021'等于char c = (char)33等于 char c = '!'
James S

1
@NaveedKhan:不以问题的方式提出。
Jon Skeet

37

您可以简单地写:

char c = (char) 2;

要么

char c = Convert.ToChar(2);

或更复杂的选项,仅用于ASCII编码

char[] characters = System.Text.Encoding.ASCII.GetChars(new byte[]{2});
char c = characters[0];

1
鉴于我们正在谈论的两个小于128的特定值,后一种选择似乎不必要。Unicode旨在匹配ASCII。
乔恩·斯基特

2
如果要转换多个1字节或一个数组,则很好。
丹农

23

重要的是要注意,在C#中,char类型存储为Unicode UTF-16。

从ASCII等效整数到char

char c = (char)88;

要么

char c = Convert.ToChar(88)

从char到ASCII等效整数

int asciiCode = (int)'A';

文字必须与ASCII等价。例如:

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

将打印

X
3626

扩展ASCII范围从0到255。

从默认的UTF-16文字转换为char

使用符号

char c = 'X';

使用Unicode代码

char c = '\u0058';

使用十六进制

char c = '\x0058';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.