Вопрос

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

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

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

int number = 17;
byte[] s = sprintf("%2c", number);
Это было полезно?

Решение 3

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

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

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

Другие советы

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

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

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

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

Чтобы получить байты, используйте Кодировка :

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top