Из строки в виде шестнадцатеричного числа получить массив байтов

Например у меня есть такая строка "A329DF34". Как ее превратить в массив из 4 байтов?

Конечно можно разделить ее на части по 2, дальше каждую часть превратить в число от 0 до 255, а затем сохранить результат в виде байт массива. Но может есть стандартное решение?


Ответы (1 шт):

Автор решения: aepot

Простое решение "в лоб"

static void Main(string[] args)
{
    string hex = "A329DF34";
    byte[] bytes = new byte[hex.Length / 2];
    for (int i = 0; i < bytes.Length; i++)
        bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
    Console.WriteLine(string.Join(", ", bytes));
}

Вывод в консоль

163, 41, 223, 52

Альтернативаное решение, если в массиве ровно 4 байта

static void Main(string[] args)
{
    string hex = "A329DF34";
    uint number = Convert.ToUInt32(hex, 16);
    byte[] bytes = BitConverter.GetBytes(number);
    Array.Reverse(bytes);
    Console.WriteLine(string.Join(", ", bytes));
}

Для .NET 5 и новее, есть встроенное решение

static void Main(string[] args)
{
    string hex = "A329DF34";
    byte[] bytes = Convert.FromHexString(hex);
    Console.WriteLine(string.Join(", ", bytes));
}

Больше разных решений можно найти здесь.

→ Ссылка