2008-11-23 12 views
20

¿Hay algo similar a sprintf() en C#?sprintf en C#?

Por ejemplo, me gustaría convertir un entero a una matriz de bytes de 2 bytes.

algo como:

int number = 17; 
byte[] s = sprintf("%2c", number); 
+0

He actualizado mi respuesta a la edición (byte [] frente a cadena) –

+0

Aclare si desea el int como una matriz de bytes o si quiere la int convertida a una cadena y luego a una matriz de bytes – Yona

Respuesta

3

Resultó, que era lo que realmente quería esto:

short number = 17; 
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); 
writer.Write(number); 
writer.Flush(); 

La clave aquí es la escritura en función de la clase BinaryWriter. Tiene 18 sobrecargas, convirtiendo diferentes formatos en una matriz de bytes que escribe en la secuencia. En mi caso, tengo que asegurarme de que el número que deseo escribir se mantenga en un tipo de datos corto, esto hará que la función de escritura escriba 2 bytes.

+0

Si está utilizando una secuencia entonces su solución funciona muy bien, pero para la conversión simple puede usar la clase BitConverter (verifique mi respuesta.) – Yona

+0

Sí, estoy de acuerdo. Me encontré con eso también ... –

27
string s = string.Format("{0:00}", number) 

el primer 0 significa "el primer argumento" (número es decir,); el 00 después de los dos puntos es el especificador de formato (2 dígitos numéricos).

Sin embargo, tenga en cuenta que las cadenas de .NET son UTF-16, por lo que una cadena de 2 caracteres es de 4 bytes, no 2

(edit: pregunta cambió de string a byte[])

para obtener los bytes , utilice Encoding:

byte[] raw = Encoding.UTF8.GetBytes(s); 

(obviamente diferentes codificaciones pueden dar resultados diferentes; UTF8 dará 2 bytes para estos datos)

En realidad, una versión más corta del primer bit es:

string s = number.ToString("00"); 

Pero la versión string.Format es más flexible.

4

EDIT: Estoy asumiendo que desea convertir el valor de un entero a una matriz de bytes y no el valor convertido en una cadena primero y luego a una matriz de bytes (marque la respuesta de Marc para el segundo.)

para convertir un int a una matriz de bytes que puede utilizar: (. desde un int es de 32 bits)

byte[] array = BitConverter.GetBytes(17); 

pero que le dará una serie de 4 bytes y no 2 para obtener una matriz de 2 bytes que debe usar:

byte[] array = BitConverter.GetBytes((short)17); 

Si lo que desea es convertir el valor de 17 a dos personajes a continuación, utilizar:

string result = string.Format("{0:00}", 17); 

Pero como Marc señaló el resultado se consumen 4 bytes ya que cada personaje en .NET es de 2 bytes (UTF-16) (incluidos los dos bytes que contienen la longitud de la cadena será de 6 bytes).