2010-01-06 13 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

相關問題