Pregunta

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

Me gustaría, por ejemplo, convertir un número entero en una matriz de bytes de 2 bytes.

Algo así como:

int number = 17;
byte[] s = sprintf("%2c", number);
¿Fue útil?

Solución 3

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

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

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

Otros consejos

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

El primer 0 significa " el primer argumento " (es decir, número); 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 .NET son UTF-16, por lo que una cadena de 2 caracteres tiene 4 bytes, no 2

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

Para obtener los bytes, use Codificación :

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

(obviamente, codificaciones diferentes 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.

EDITAR: supongo que desea convertir el valor de un entero a una matriz de bytes y no el valor convertido a una cadena primero y luego a una matriz de bytes (verifique la respuesta de Marc para la última).

Para convertir un int en una matriz de bytes, puede usar:

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

pero eso le dará una matriz de 4 bytes y no 2 (ya que un int es de 32 bits). Para obtener una matriz de 2 bytes, debe usar:

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

Si solo desea convertir el valor de 17 a dos caracteres, use:

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top