Есть ли что-то похожее на sprintf() в C#?
Я, например, хотел бы преобразовать целое число в 2-байтовый массив байтов.
Что-то типа:
int number = 17;
byte[] s = sprintf("%2c", number);
Пожалуйста, поясните, хотите ли вы, чтобы int был массивом байтов или если вы хотите, чтобы int был преобразован в строку, а затем в массив байтов.





string s = string.Format("{0:00}", number)
Первый 0 означает «первый аргумент» (т.е. число); 00 после двоеточия - это спецификатор формата (2 цифры).
Однако обратите внимание, что строки .NET - это UTF-16, поэтому двухсимвольная строка составляет 4 байта, а не 2
(редактировать: вопрос изменен с string на byte[])
Чтобы получить байты, используйте Encoding:
byte[] raw = Encoding.UTF8.GetBytes(s);
(очевидно, что разные кодировки могут дать разные результаты; UTF8 даст 2 байта для этих данных)
Фактически, более короткая версия первого бита:
string s = number.ToString("00");
Но версия string.Format более гибкая.
Обновлено: Я предполагаю, что вы хотите преобразовать значение целого числа в массив байтов, а не значение, преобразованное сначала в строку, а затем в массив байтов (проверьте ответ Марка для последнего.)
Чтобы преобразовать 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();
Ключевым моментом здесь является функция записи класса BinaryWriter. Он имеет 18 перегрузок, преобразующих различные форматы в массив байтов, который он записывает в поток. В моем случае я должен убедиться, что число, которое я хочу записать, хранится в коротком типе данных, это заставит функцию записи записать 2 байта.
Если вы используете поток, ваше решение работает очень хорошо, но для простого преобразования вы можете использовать класс BitConverter (проверьте мой ответ).
Я обновил свой ответ на ваше изменение (byte [] vs string)