2010-01-06 14 views
6

如何将ASCII字符存储为“char”文字?如何使用ASCII数据分配字符?

ASCII字符我想用我的特殊字符是文件分隔符:

十进制:028
八:034
十六进制:01C
二进制:00011100

// This works in C/C++, but not C#: 
static const char FS = 0x1C; // File Separator 
+1

注意:没有非托管C#这样的事情。 – ChaosPandion 2010-01-06 21:46:08

+0

混沌:是的:http://msdn.microsoft.com/en-us/library/aa288474%28VS.71%29.aspx – 2010-01-06 21:50:51

+2

它仍然被管理。你可以做不安全的事情。 – ChaosPandion 2010-01-06 21:52:04

回答

5

我会想像'\u001C'会工作。

+0

今天改变了我的答案,因为我看到这是我实际使用的版本。谢谢马克。顺便说一句:挖掘节日的阿凡达。我似乎无法让我的Gravatar改变。每次我在过去尝试过,我的头像会回复一些SO Assigned generic。 – jp2code 2013-01-03 16:11:34

13

静态修饰符不是必需的,你必须明确地将你的int转换为char。

const char FS = (char)0x1C; 
+0

谢谢。我想这很简单,我甚至都没有想到演员。 – jp2code 2010-01-06 21:47:30

2

const char FS ='\ x1C';

+4

'\ x'转义序列是纯粹的邪恶 - 至少对于字符串。例如,“\ x9Bad Compiler”和“\ x9Good compiler”之间的区别很难找到。我猜,对于单个字符来说并不是那么糟糕。我仍然会使用'\ u001c'。 – 2010-01-06 21:47:09

+0

ChaosPandion抢先了解它。我曾尝试使用'\ 1C',但那没有奏效。谢谢! – jp2code 2010-01-06 21:48:56

+0

@Jon Skeet:但是你可以像使用四位数的'\ u'一样方便地使用四位数的'\ x'。例如'“\ x0009Bad Compiler”'将编译成与“”\ u0009Bad Compiler“相同”。而'\ x'对'char'文字更方便,因为你没有*可以使用全部四位数字。正如你指出的那样,对于字符串来说,如果你不小心,可能会非常棘手。但是如果没有歧义(比如在序列之后没有字母数字),那么我仍然更喜欢'\ x'。顺便说一句,我强烈反对使用** evil **这个词来表示“一个棘手或危险的结构”。 – 2010-01-06 21:55:37

0

如果您要将此代码写入流中,请小心编码; .NET的字符和字符串是UTF-16编码的,所以实际上会写成001C(或1C00,这取决于字节顺序;我不记得是哪一个)。您可以通过在打开流时指定适当的编码来避免此问题。

编辑:其实,情况并非如此!经过测试,StreamWriter等的默认行为是使用系统当前的ANSI代码页(通常是ISO-8859-1),所以它实际上是以预期的8位格式写入的。这当然会给非ANSI字符带来意想不到的结果。

+0

@Inititor:Jon Skeet和Marc Gravell建议使用'\ u001C'来防止UTF-16码流出现滑倒吗? – jp2code 2010-01-06 22:07:50

+0

@ jp2code:我实际上是错的,所以没关系:)但是,不,分配字符的方式不会影响写入流的方式。 – 2010-01-06 22:57:05

相关问题