2010-11-04 4 views
5

qualcuno può spiegare il motivo per cui questo non funziona:stringa di formato e esagonali caratteri

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

uscita è:

\x05{0} : \x05INSERT TEXT 

Perché l'\ x05 vengono sostituiti?

+0

I caratteri non sono esadecimali o altro, si desidera generare un carattere che corrisponde al valore 5, indicato anche come \ x05. Dovresti contrassegnare la risposta di Mr. Listers come corretta, poiché risolve il tuo problema. – Jaap

risposta

10

Il formato per l'argomento deve essere impostato nello specificatore di formato, altrimenti si inserisce semplicemente un letterale "\ x". Come questo:

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

Non confondere come rappresentate un esagono letterale di codice sorgente con quello che si stampa in una stringa formattata, sono cose diverse.

+0

ma mi darebbe la stringa "05". Sto cercando di ottenere il singolo carattere esadecimale \ x05 nella stringa, ma non riesco a inserirlo letterale in quanto deve provenire da una variabile (l'esempio ha hard coded 5, in realtà è una variabile int). Ecco perché provo a impostare prima una stringa di formato separatamente. – user380689

+0

@user: come vorresti che fosse visualizzato? Quando si ottiene un numero nella sua forma esadecimale, si ottengono solo le cifre, senza prefissi "0x". Se desideri includere questi prefissi, dovresti aggiungerlo in te stesso. –

0

È questo ciò che ti serve?

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

Per inserire un carattere letterale in una stringa, accertarsi che il compilatore sappia che si tratta di un carattere.

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

o si può iniziare con un vero e proprio carattere:

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

fare la vostra scelta.