2010-11-04 10 views
5

kann jemand erklären, warum dies nicht funktioniert:String-Format und Hex-Zeichen

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

Ausgang ist:

\x05{0} : \x05INSERT TEXT 

warum die \ x05 nicht ersetzt werden?

+0

Zeichen sind nicht Hex oder irgendetwas anderes, Sie möchten ein Zeichen ausgeben, das dem Wert 5 entspricht, der auch als \ x05 bezeichnet wird. Sie sollten Mr. Listers Antwort als die richtige markieren, da es Ihr Problem behebt. – Jaap

Antwort

10

Das Format für das Argument sollte im Formatspezifizierer festgelegt werden, andernfalls fügen Sie nur ein Literal "\ x" ein. Wie folgt aus:

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

Verwechseln Sie nicht, wie Sie einen Hex-wörtliche im Quellcode darstellen mit dem, was Sie in einem formatierten String drucken würde, sie sind verschiedene Dinge.

+0

aber das würde mir die Zeichenfolge "05" geben. Ich versuche, das einzelne hexadezimale Zeichen \ x05 in der Zeichenkette zu bekommen, aber ich kann es nicht als Literal eingeben, wie es von einer Variablen kommen muss (das Beispiel hat hart codierte 5, in Wirklichkeit ist es int Variable). Deshalb versuche ich zuerst eine Formatzeichenkette separat zu gründen. – user380689

+0

@user: Wie möchten Sie, dass es angezeigt wird? Wenn Sie eine Zahl in hexadezimaler Form erhalten, erhalten Sie nur die Ziffern, keine Präfixe "0x". Wenn Sie diese Präfixe hinzufügen möchten, müssen Sie das in sich selbst hinzufügen. –

0

Ist das, was Sie brauchen?

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

Um ein literales Zeichen in eine Zeichenfolge zu stellen, stellen Sie nur sicher, dass der Compiler weiß, dass es ein Zeichen ist.

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

oder Sie können mit einem echten Zeichen beginnen:

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

Sie Ihre Wahl.

Verwandte Themen