Sprintf на C#?

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

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

Что-то типа:

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

Я обновил свой ответ на ваше изменение (byte [] vs string)

Marc Gravell 24.11.2008 01:04

Пожалуйста, поясните, хотите ли вы, чтобы int был массивом байтов или если вы хотите, чтобы int был преобразован в строку, а затем в массив байтов.

Yona 24.11.2008 01:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
21
2
33 185
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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 (проверьте мой ответ).

Yona 24.11.2008 01:17

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