sprintf в C#?

есть что-то похожее на sprintf() в C#?

Я, например, хотел бы преобразовать целое число в 2-байтовый байтовый массив.

что-то типа:

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

3 ответов


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

первый 0 означает "первый аргумент" (т. е. число); 00 после двоеточия-спецификатор формата (2 числовые цифры).

однако обратите внимание, что строки .NET являются UTF-16, поэтому 2-символьная строка составляет 4 байта, а не 2

(edit: вопрос изменен с string to byte[])

чтобы получить байты, использовать Encoding:

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

(очевидно, разные кодировки могут дать разные результаты; UTF8 даст 2 байта для этого данные)

на самом деле, более короткая версия Первый БИТ-это:

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

но string.Format версия более гибкая.


EDIT: я предполагаю, что вы хотите преобразовать значение целого числа в массив байтов, а не значение, преобразованное сначала в строку, а затем в массив байтов (проверьте ответ марка для последнего.)

чтобы преобразовать int в массив байтов, вы можете использовать:

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

но это даст вам массив из 4 байт, а не 2 (так как int-это 32 бита.) Чтобы получить массив из 2 байт, вы должны использовать:

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

Если вы просто хотите преобразовать значение из 17 в два символы затем использовать:

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

но, как отметил Марк, результат будет потреблять 4 байта, так как каждый символ в .NET составляет 2 байта (UTF-16) (включая два байта, которые содержат длину строки, это будет 6 байтов).


оказалось, что на самом деле я хотел вот чего:

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

ключом здесь является функция Write класса BinaryWriter. Он имеет 18 перегрузок, Преобразуя различные форматы в массив байтов, который он записывает в поток. В моем случае я должен убедиться, что номер, который я хочу написать, хранится в коротком типе данных, это заставит функцию Write написать 2 байта.