Question

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

J'aimerais par exemple convertir un entier en un tableau d'octets sur 2 octets.

Quelque chose comme:

int number = 17;
byte[] s = sprintf("%2c", number);
Était-ce utile?

La solution 3

Il s’est avéré que ce que je voulais vraiment, c’était:

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 conservé dans un type de données court. La fonction Write enregistre 2 octets.

Autres conseils

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

Le premier 0 signifie "le premier argument". (c'est-à-dire nombre); le 00 après les deux points est le spécificateur de format (2 chiffres).

Cependant, notez que les chaînes .NET sont en UTF-16, donc une chaîne de 2 caractères est composée de 4 octets et non de 2

(édition: la question a été remplacée par octet [] )

Pour obtenir les octets, utilisez Encodage :

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

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

En fait, une version abrégée du premier bit est la suivante:

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

Mais la version string.Format est plus flexible.

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

Pour convertir un entier en un tableau d'octets, vous pouvez utiliser:

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

mais cela vous donnera un tableau de 4 octets et non de 2 (puisqu'un int est de 32 bits.) Pour obtenir un tableau de 2 octets, vous devez utiliser:

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

Si vous souhaitez simplement convertir la valeur 17 en deux caractères, utilisez:

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

Mais comme Marc l'a souligné, le résultat consomme 4 octets puisque chaque caractère dans .NET correspond à 2 octets (UTF-16) (y compris les deux octets contenant la longueur de la chaîne, il sera de 6 octets).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top