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 байта.