Спринтф в C #? - PullRequest
       24

Спринтф в C #?

20 голосов
/ 24 ноября 2008

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

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

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

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

Ответы [ 3 ]

27 голосов
/ 24 ноября 2008
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 более гибкая.

4 голосов
/ 24 ноября 2008

РЕДАКТИРОВАТЬ: Я предполагаю, что вы хотите преобразовать значение целого числа в байтовый массив, а не значение, преобразованное сначала в строку, а затем в байтовый массив (проверьте ответ Марка для последнего.)

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

3 голосов
/ 24 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...