2010-11-04 82 views
5

有人可以解釋爲什麼這不工作:字符串格式和十六進制字符

string f = string.Format("\\x{0:00}{{0}}", 5); 
string o = string.Format(f, "INSERT TEXT"); 
System.Diagnostics.Debug.WriteLine(f + " : " + o); 

輸出是:

\x05{0} : \x05INSERT TEXT 

爲何\ X05不會被取代?

+0

字符不是十六進制或其他任何東西,你想輸出一個字符對應的值爲5,也表示爲\ x05。您應該將Listers先生的答案標記爲正確答案,因爲它可以解決您的問題。 – Jaap 2013-04-04 16:22:07

回答

10

參數的格式應該在格式說明符中設置,否則您只需插入文字「\ x」。就像這樣:

// "5" as a lowercase 2-digit hex 
string f = string.Format("{0:x2}{{0}}", 5); 

不要混淆你如何表示文本中的源代碼,你會在一個格式化字符串打印的內容十六進制,他們是不同的東西。

+0

但這會給我字符串「05」。我試圖在字符串中得到單個十六進制字符\ x05,但是我不能將它作爲一個字面量來使用,因爲它必須來自一個變量(該例子硬編碼爲5,實際上是int變量)。這就是爲什麼我嘗試首先單獨設置格式字符串。 – user380689 2010-11-04 05:45:58

+0

@user:你想如何顯示它?當以十六進制形式獲取數字時,您只需獲取數字,不需要「0x」前綴。如果你想包含這些前綴,你必須自己添加。 – 2010-11-04 05:48:38

0

這是你所需要的?

int x = 5; 
    string f = string.Format("\\x{0:x2}{1}", x, "INSERT TEXT"); 
    Console.WriteLine(f); 
6

要在字符串中放置一個文字字符,只要確保編譯器知道它是一個字符。

string f = string.Format("{0}", (char)5); 
string g = string.Format("{0}", Convert.ToChar(5)); 
string h = string.Format("{0}", char.ConvertFromUtf32(5)); 

,或者你可以用一個真正的字符開始了:

string i = string.Format("{0}", '\x05'); 
string j = string.Format("{0}", '\u0005'); 
string k = string.Format("{0}", '\U00000005'); 

隨你挑。