Преобразование десятичного значения в массив байтов — распространенная задача в программировании на C# при работе с двоичными данными или операциями низкого уровня. В этой статье мы рассмотрим несколько методов преобразования десятичного числа в массив байтов на C#, а также приведем примеры кода для каждого подхода.
Метод 1: использование BitConverter.GetBytes
Класс BitConverter в C# предоставляет простой способ преобразования различных типов данных, включая десятичные, в массивы байтов. Вот пример того, как его использовать:
decimal decimalValue = 123.45m;
byte[] byteArray = BitConverter.GetBytes(decimalValue);
Метод 2: использование Decimal.GetBits
Структура Decimal в C# имеет встроенный метод GetBits, который возвращает массив целых чисел, представляющих десятичное значение. Затем вы можете преобразовать эти целые числа в байты, используя BitConverter.GetBytes. Вот пример:
decimal decimalValue = 123.45m;
int[] bits = decimal.GetBits(decimalValue);
byte[] byteArray = new byte[bits.Length * 4];
Buffer.BlockCopy(bits, 0, byteArray, 0, byteArray.Length);
Метод 3: использование BinaryWriter
Класс BinaryWriter в C# позволяет записывать в поток данные различных типов, включая десятичные. Записав десятичное значение в MemoryStream и затем преобразовав его в массив байтов, вы можете добиться желаемого преобразования. Вот пример:
decimal decimalValue = 123.45m;
byte[] byteArray;
using (MemoryStream stream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(decimalValue);
byteArray = stream.ToArray();
}
}
Метод 4: ручное преобразование
Если вы предпочитаете ручной подход, вы можете преобразовать десятичное число в массив байтов, извлекая отдельные байты десятичного значения с помощью операций сдвига битов и маскировки. Вот пример:
decimal decimalValue = 123.45m;
byte[] byteArray = new byte[16];
int[] bits = decimal.GetBits(decimalValue);
for (int i = 0; i < 4; i++)
{
int offset = i * 4;
byteArray[offset] = (byte)(bits[i] & 0xFF);
byteArray[offset + 1] = (byte)((bits[i] >> 8) & 0xFF);
byteArray[offset + 2] = (byte)((bits[i] >> 16) & 0xFF);
byteArray[offset + 3] = (byte)((bits[i] >> 24) & 0xFF);
}
В этой статье мы рассмотрели несколько методов преобразования десятичного числа в массив байтов в C#. Мы рассмотрели использование BitConverter.GetBytes, Decimal.GetBits, BinaryWriter и методы ручного преобразования. В зависимости от вашего конкретного варианта использования вы можете выбрать наиболее подходящий подход. Следуя предоставленным примерам кода, вы можете легко выполнять преобразования десятичных массивов в байтовые в своих приложениях C#.