Преобразование между байтовыми массивами и шестнадцатеричными строками в C#

В этом примере используются методы расширения для преобразования между байтовыми массивами и шестнадцатеричными строками. Он добавляет метод расширения ToHex в тип byte [] и метод расширения ToBytes в класс string.

Чтобы создать метод расширения, создайте открытый статический класс. Дайте ему методы, где объявление первого параметра начинается с ключевого слова this. Этот тип параметра определяет класс, к которому применяется метод.

В следующем коде показан метод расширения byte [] типа ToHex. Обратите внимание, как первый параметр имеет ключевое слово this и имеет тип byte [].

// Возвращает строку, представляющую массив байтов
// как разделение шестнадцатеричных значений
// символом разделителя.
public static string ToHex(this byte[] the_bytes, char separator)
{
    return BitConverter.ToString(
        the_bytes, 0).Replace('-', separator);
}

Этот метод вызывает BitConverter.ToString, чтобы преобразовать массив байтов в строку, содержащую шестизначные шестнадцатеричные значения в формате 54-00-6F-00-20. В коде используется метод string класса Replace для замены дефиса на нужный разделительный символ.

К сожалению, класс BitConverter не имеет обратного метода, который преобразует строку формы 54-00-6F-00-20 обратно в a байт, поэтому вам нужно написать свой собственный. К счастью, это не сложно. В следующем коде показан способ расширения string класса ToBytes.

// Преобразование строки, содержащей 2-значный шестнадцатеричный
// значения в массив байтов.
public static byte[] ToBytes(this string the_string)
{
    // Получить символ разделителя.
    char separator = the_string[2];

    // Разделить на разделители.
    string[] pairs = the_string.Split(separator);
    byte[] bytes = new byte[pairs.Length];
    for (int i = 0; i < pairs.Length; i++)
        bytes[i] = Convert.ToByte(pairs[i], 16);
    return bytes;
}

Этот метод предполагает, что строка состоит из двухзначных шестнадцатеричных значений, разделенных символом разделителя. Он использует третий символ строки в качестве разделителя. Затем он использует метод string класса Split для разделения строки в разделителях.

Затем код перебирает шестнадцатеричные значения, использует Convert.ToByte для преобразования каждого обратно в значение byte и сохраняет результаты в bytes . Когда он заканчивается, метод возвращает этот массив.

При нажатии левой кнопки & gt; , программа использует следующий код для преобразования строки в шестнадцатеричное представление.

// Преобразуем строку в массив байтов и отобразим ее.
private void btnToHexString_Click(object sender, EventArgs e)
{
    // Преобразуем строку в байты.
    UnicodeEncoding ascii_encoder = new UnicodeEncoding();
    byte[] bytes = ascii_encoder.GetBytes(txtOriginal.Text);

    // Отображение результата как строки шестнадцатеричных значений.
    txtHexadecimal.Text = bytes.ToHex(' ');
}

Этот код использует объект System.Text.UnicodeEncoding для преобразования строки в массив byte. Затем он использует метод расширения ToHex для преобразования массива в строку и отображает результат.

При нажатии правой кнопки & gt; , программа использует следующий код для преобразования шестнадцатеричного представления обратно в строку.

// Преобразуем строку шестнадцатеричных значений обратно в строку.
private void btnToString_Click(object sender, EventArgs e)
{
    // Преобразование строки шестнадцатеричных значений
    // в массив байтов.
    byte[] bytes = txtHexadecimal.Text.ToBytes();

    // Преобразование байтов в строку и отображение результата.
    UnicodeEncoding ascii_encoder = new UnicodeEncoding();
    txtConvertedBack.Text = ascii_encoder.GetString(bytes);
}

Источник: http://csharphelper.com/blog/2014/09/convert-between-byte-arrays-and-hexadecimal-strings-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector