Подтвердить что ты не робот

Sprintf в С#?

Есть ли что-то похожее на sprintf() в С#?

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

Что-то вроде:

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

Ответ 1

Оказалось, что я действительно хотел:

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

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

Ответ 2

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

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

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

(изменить: вопрос изменился с string на byte[])

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

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

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

Собственно, более короткая версия первого бита:

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

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

Ответ 3

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

Чтобы преобразовать 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);

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