Преобразование между байтовыми массивами и шестнадцатеричными строками в 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);
}
