Есть ли что-то похожее на sprintf()
в С#?
Я хотел бы, например, преобразовать целое число в 2-байтовый байтовый массив.
Что-то вроде:
int number = 17;
byte[] s = sprintf("%2c", number);
Есть ли что-то похожее на sprintf()
в С#?
Я хотел бы, например, преобразовать целое число в 2-байтовый байтовый массив.
Что-то вроде:
int number = 17;
byte[] s = sprintf("%2c", number);
Оказалось, что я действительно хотел:
short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();
Ключ здесь - функция Write класса BinaryWriter. Он имеет 18 перегрузок, преобразовывая разные форматы в байтовый массив, который он записывает в поток. В моем случае я должен убедиться, что число, которое я хочу написать, хранится в коротком типе данных, это заставит функцию Write записать 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
более гибкая.
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 байтов).