2010-11-04 4 views
5

quelqu'un peut-il expliquer pourquoi ce travail ne marche pas:format chaîne et caractères hexadécimaux

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

sortie est:

\x05{0} : \x05INSERT TEXT 

pourquoi le \ x05 pas se remplacer?

+0

Les caractères ne sont pas hexadécimaux ou quoi que ce soit d'autre, vous voulez sortir un caractère qui correspond à la valeur 5, également appelée \ x05. Vous devriez indiquer que la réponse de M. Listers est la bonne, car elle résout votre problème. – Jaap

Répondre

10

Le format de l'argument doit être défini dans le spécificateur de format, sinon vous insérez simplement un "\ x" littéral. Comme ceci:

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

Ne confondez pas la façon dont vous représentez un hexagone littérale dans le code source avec ce que vous imprimer dans une chaîne formatée, ils sont des choses différentes.

+0

mais cela me donnerait la chaîne "05". J'essaie d'obtenir le seul caractère hexadécimal \ x05 dans la chaîne mais je ne peux pas le mettre comme un littéral car il doit provenir d'une variable (l'exemple a codé en dur 5, en réalité c'est une variable int). C'est pourquoi j'essaye d'installer une chaîne de format séparément d'abord. – user380689

+0

@user: Comment voulez-vous qu'il soit affiché? Lorsque vous obtenez un nombre dans sa forme hexadécimale, vous obtenez simplement les chiffres, pas de préfixe "0x". Si vous souhaitez inclure ces préfixes, vous devrez ajouter cela en vous-même. –

0

Est-ce ce que vous cherchez?

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

Pour mettre un caractère littéral dans une chaîne, assurez-vous que le compilateur sait qu'il s'agit d'un caractère.

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

ou vous pouvez commencer avec un vrai chevalier:

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

Faites votre choix.

Questions connexes