2008-11-23 6 views
20

Y a-t-il quelque chose de similaire à sprintf() en C#?sprintf en C#?

Je voudrais par exemple convertir un entier en un tableau d'octets de 2 octets.

quelque chose comme:

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

J'ai mis à jour ma réponse concernant votre modification (octet [] vs chaîne) –

+0

Veuillez préciser si vous voulez que l'int soit un tableau d'octets ou si vous voulez que l'int soit converti en chaîne et ensuite en tableau d'octets – Yona

Répondre

3

Il est apparu que ce que je voulais vraiment était le suivant:

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

La clé ici est la fonction Write de la classe BinaryWriter. Il a 18 surcharges, convertissant différents formats en un tableau d'octets qu'il écrit dans le flux. Dans mon cas, je dois m'assurer que le nombre que je veux écrire est gardé dans un court type de données, cela fera que la fonction Write écrira 2 octets.

+0

Si vous utilisez un flux puis votre solution fonctionne très bien, mais pour une conversion simple, vous pouvez utiliser la classe BitConverter (vérifiez ma réponse. – Yona

+0

Oui, je suis d'accord. Je suis tombé sur ça aussi .. –

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

Les premiers 0 signifie "le premier argument" (à savoir le nombre); le 00 après les deux points est le spécificateur de format (2 chiffres numériques).

Cependant, notez que les chaînes .NET sont UTF-16, donc une chaîne 2 caractères est de 4 octets, pas 2

(edit: question a changé de string à byte[])

Pour obtenir les octets , utilisez Encoding:

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

(évidemment différents encodages peuvent donner des résultats différents, UTF8 donnera 2 octets pour ces données)

En fait, une version plus courte du premier bit est:

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

Mais la version string.Format est plus souple.

4

EDIT: Je suppose que vous voulez convertir la valeur d'un nombre entier à un tableau d'octets et non la valeur convertie en une chaîne d'abord, puis à un tableau d'octets (vérifier la réponse de marc pour ce dernier.)

pour convertir un entier à un tableau d'octets, vous pouvez utiliser: (. car un int est de 32 bits)

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

mais qui vous donnera un tableau de 4 octets et non 2 pour obtenir un tableau de 2 octets que vous devez utiliser:

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

Si vous voulez juste convertir la valeur 17 à deux caractères utilisent alors:

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

Mais Marc a le résultat consommeront 4 octets puisque chaque caractère dans .NET est de 2 octets (UTF-16) (y compris les deux octets qui contiennent la longueur de la chaîne, ce sera 6 octets).