如何在C#中通过ASCII字符编码获取字符

99

我正在尝试解析一个在C#中由ASCII字符代码0、1和2分隔的字段(字符串)数组的文件(在Visual Basic 6中,您可以通过使用Chr(0)或Chr(1)等来生成这些)。

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

char separator = '\0';

但是对于字符代码1和2,这并不起作用吗?

3个回答

180

两种选择:

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

4
char sep = '\x32'; 的意思是将十六进制数 32 转换为字符并将其赋值给变量 sep。换句话说,变量 sep 将存储十进制数 50 对应的 ASCII 字符 '2'。 - ngoozeff
3
我不喜欢\x,原因有很多,并且不建议使用它。 - Jon Skeet
7
LOL - 给你更多的分数让我感到沮丧,但无论如何还是谢谢你的回答 :P - Jimbo
27
可能已经很清楚,但为了明确起见,在这个答案的第一个选项中,数字是十六进制字符代码。在第二个选项中,它是十进制数。显然,1(十进制)= 1(十六进制),但对于更高的代码,情况并非如此!例如:char c = '\u0021' 等同于 char c = (char)33 等同于 char c = '!' - James S
1
@NaveedKhan:不是问题所涉及的方式。 - Jon Skeet
显示剩余3条评论

41

你可以简单地写:

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。 - Jon Skeet
2
如果你想转换超过1个字节或数组,这是一个不错的选择。 - Danon

30

需要注意的是,在C#中,char类型以Unicode UTF-16的形式存储。

从ASCII等价整数到char类型

char c = (char)88;
或者
char c = Convert.ToChar(88)

从字符到ASCII等效整数

int asciiCode = (int)'A';

字面值必须与ASCII字符等价。例如:

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

将打印

X
3626

Extended ASCII范围从0到255。

从默认的UTF-16文字字面量到字符

使用符号

char c = 'X';

使用Unicode编码

char c = '\u0058';

使用十六进制

char c = '\x0058';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接