2010-11-04 16 views
5

Puede alguien explicar por qué esto no funciona:cadena de formato y hexagonales caracteres

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

de salida es:

\x05{0} : \x05INSERT TEXT 

¿Por qué la \ x05 no son reemplazados?

+0

Los caracteres no son hexadecimales o cualquier otra cosa, desea generar un carácter que corresponda al valor 5, también denominado como \ x05. Debe marcar la respuesta del Sr. Listers como la correcta, ya que soluciona su problema. – Jaap

Respuesta

10

El formato del argumento debe establecerse en el especificador de formato; de lo contrario, solo está insertando un literal "\ x". De esta manera:

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

No hay que confundir la forma de representarse un hexágono literal en código fuente con lo que se puede imprimir en una cadena con formato, son cosas diferentes.

+0

pero eso me daría la cadena "05". Estoy tratando de obtener el carácter hexadecimal único \ x05 en la cadena, pero no puedo ponerlo en un literal, ya que tiene que provenir de una variable (el ejemplo tiene un código fijo 5, en realidad es una variable int). Es por eso que intento configurar una cadena de formato por separado primero. – user380689

+0

@user: ¿Cómo le gustaría que se muestre? Al obtener un número en su forma hexadecimal, solo obtiene los dígitos, sin prefijos "0x". Si desea incluir esos prefijos, debe agregar eso en usted mismo. –

0

¿Es esto lo que necesita?

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

Para poner un carácter literal en una cadena, solo asegúrese de que el compilador sepa que es un carácter.

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

o puede comenzar con un char real:

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

una serie de opciones.

Cuestiones relacionadas