如何将ASCII字符存储到“char”字面值中?
我想要用于特殊字符的ASCII字符是文件分隔符号:
十进制:028
八进制:034
十六进制:01C
二进制:00011100
// This works in C/C++, but not C#:
static const char FS = 0x1C; // File Separator
如何将ASCII字符存储到“char”字面值中?
我想要用于特殊字符的ASCII字符是文件分隔符号:
十进制:028
八进制:034
十六进制:01C
二进制:00011100
// This works in C/C++, but not C#:
static const char FS = 0x1C; // File Separator
静态修饰符不是必需的,您需要显式地将int强制转换为char。
const char FS = (char)0x1C;
'\u001C'
可以使用。常量字符FS的值为'\x1C'。
\x
转义序列在字符串中很不友好,可以说是纯恶魔。例如,"\x9Bad Compiler" 和 "\x9Good compiler" 之间的区别相当难以察觉。对于单个字符来说可能还好,但我猜我自己会使用 \u001c
。 - Jon Skeet\u
一样轻松地使用四个数字的\x
。例如,"\x0009Bad Compiler"
将编译为与"\u0009Bad Compiler"
相同。对于char
字面量,\x
更方便,因为您不必使用所有四个数字。如果不小心处理字符串,则可能会出现问题,正如您所指出的那样。但是,如果没有歧义(例如在序列后面没有字母数字),那么我仍然更喜欢\x
。顺便说一句,我强烈反对使用“邪恶”这个词来表示“棘手或危险的结构”。 - P Daddy如果您要将此内容写入流,请注意编码问题;.NET的字符和字符串是UTF-16编码的,因此实际上会被写成001C
(或1C00
,具体取决于字节序;我不记得了)。您可以在打开流时指定适当的编码来避免这个问题。
编辑:实际上,情况并非如此!经过测试,StreamWriter
等的默认行为是使用系统当前的ANSI代码页(通常是ISO-8859-1),因此它实际上以预期的8位格式写入。这当然会给非ANSI字符带来意外的结果。