2014-10-27 64 views
0

注意:我不想讓問題時間過長,所以問題標題中的「如何」轉換爲「在.Net框架中是否有這種方法」。將字符串文字轉換爲實際值

只是一個提醒:

\n 

如果上面的字符串的打印表示形式,然後其內部的版本是一個字符,而不是兩個,該代碼是0X0A。

然而可以寫:

string s = "\\n"; // three characters in editor 

其轉換爲2個字符\n內部表示。這不是0x0a字符!

但我想實現這一點。即我已經在字符串中的一些數據,我知道這是一個字符串的可打印表示。我想將它轉換爲內部表示(C#編譯器一直在做的事情)。

string printable = "\\n"; 
string internal_ = convert(printable); 

internal_現在只能保存一個字符,代碼爲0x0a。

問題:是否有準備使用(!)函數進行這種轉換?

+1

您可以使用'Encoding.GetBytes'方法之一獲取字節。 – 2014-10-27 14:30:36

+0

@PatrickHofman,它給你的字符串的字節,但它不解釋字符串。這個'convert'可以在字符串上被多次調用,並且會縮短每個調用中的每個元字符。總之,它做了一些不同的事情。 – greenoldman 2014-10-27 14:37:45

+0

也許你需要使問題更清楚,因爲我認爲你需要一種獲得'0x0a'的方法,而不是'\\ n'。 – 2014-10-27 14:38:51

回答

3

你可以嘗試使用System.Text.RegularExpressions.Regex.Unescape靜態方法:

string internal_ = Regex.Unescape(printable); 

但不幸的是它適用主要爲正則表達式控制字符。

測試:

var chars = internal_.ToCharArray(); 

chars陣列具有與代碼0x0a 1個元件。

+0

@PatrickHofman,它被稱爲**聯合國**逃脫的原因。你正在將它與「逃脫」混合:-)。 – greenoldman 2014-10-27 14:38:38

+1

@greenoldman:不,你的問題不清楚。 – 2014-10-27 14:39:08

+0

這將工作[_all_字符串字面變體](http://msdn.microsoft.com/en-us/library/aa691090(v = vs.71).aspx),像'\ uNNNN'? – CodeCaster 2014-10-27 14:40:12

2

這實際上是相當複雜的,有很多情況比你描述的需要解釋爲了解析字符串文字。考慮例如\0x0a。幸運的是,你不是第一個要求這樣做的人。 Regex.Unescape處理最多,但not all cases。 DeepDiver有a blog post和解析C#文字字符串的代碼 - 這應該可以滿足您的要求。

+0

我知道這是一項複雜的工作,這就是爲什麼我正在尋找一些東西來使用,而不是重新發明。我仍然希望爲此使用Roslyn,但是這將是重量級的解決方案:-) – greenoldman 2014-10-27 14:45:15