Чтение байтов из минимального и максимального шестнадцатеричных смещений с помощью C # - PullRequest
1 голос
/ 31 марта 2012

Я хочу иметь возможность читать байты из шестнадцатеричного минимального и максимального смещения, которое задается через 2 строки: строку minO и строку maxO.После этого мне просто нужно преобразовать байты в строку.

//Setup byte reader.
FileStream fs = new FileStream(EditOpen.FileName, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
long length = fs.Length;
//Read bytes to textBox1.
string minO = 0x00001844;
string maxO = ???
br.BaseStream.Position = minO;
byte[] example = br.ReadBytes(0x000003FC);
textBox1.Text = BitConverter.ToString(example);

0x00001844 - это минимальное значение, а 0x00001C3F - максимальное значение, а 0x000003FC - это разница в шестнадцатеричном формате.

Этовывод:

73-20-67-6C-61-73-73-5F-62-72-65-61-6B-20-22-30-22-2E-2E-00-73-20-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-20-73-20-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-2E-73-20-70-65-72-6B-5F-65-78-74-72-61-42-72-65-61-74-68-20-22-39-39-39-22-2E-2E-2E-2E-2E-2E-2E-00-73-20-6D-6F-74-69-6F-6E-54-72-61-63-6B-65-72-52-61-6E-67-65-20-22-39-39-39-39-22-2E-2E-2E-2E-2E-2E-00-00-00-73-20-6C-6F-62-62-79-5F-61-6E-69-6D-61-74-69-6F-6E-53-70-65-65-64-20-22-36-30-22-2E-2E-2E-2E-2E-2E-2E-00-00-73-20-67-6C-61-73-73-5F-73-68-61-74-74-65-72-65-64-5F-73-63-61-6C-65-20-22-30-22-2E-2E-2E-2E-2E-2E-2E-00-00-73-20-67-6C-61-73-73-5F-66-72-69-6E-67-65-5F-6D-61-78-73-69-7A-65-20-22-31-30-30-22-2E-2E-2E-2E-2E-2E-2E-00-73-20-75-69-5F-67-61-6D-65-74-79-70-65-20-22-73-64-22-00-00-73-20-67-5F-67-61-6D-65-74-79-70-65-20-22-73-64-22-00-00-00-73-20-70-61-72-74-79-5F-67-61-6D-65-74-79-70-65-20-22-73-64-22-00-00-00-73-20-67-61-6D-65-74-79-70-65-20-22-22-00-00-00-6D-61-70-6E-61-6D-65-00-56-41-5F-46-4F-52-57-41-52-44-00-00-73-20-61-63-74-69-76-65-61-63-74-69-6F-6E-20-22-70-65-72-6B-5F-62-75-6C-6C-65-74-50-65-6E-65-74-72-61-74-69-6F-6E-4D-75-6C-74-69-70-6C-69-65-72-20-33-30-3B-70-65-72-6B-5F-64-69-76-65-47-72-61-76-69-74-79-53-63-61-6C-65-20-2E-30-31-3B-70-65-72-6B-5F-64-69-76-65-56-65-6C-6F-63-69-74-79-20-30-3B-70-65-72-6B-5F-64-69-76-65-44-69-73-74-61-6E-63-65-43-68-65-63-6B-20-39-39-39-3B-70-65-72-6B-5F-65-78-74-65-6E-64-65-64-4D-65-6C-65-65-52-61-6E-67-65-20-39-39-39-3B-70-65-72-6B-5F-67-72-65-6E-61-64-65-44-65-61-74-68-20-61-63-31-33-30-5F-31-30-35-6D-6D-5F-6D-70-3B-70-65-72-6B-5F-77-65-61-70-52-61-74-65-4D-75-6C-74-69-70-6C-69-65-72-20-2E-30-31-3B-63-67-5F-67-75-6E-5F-78-20-36-3B-67-6C-61-73-73-5F-66-72-69-6E-67-65-5F-6D-61-78-63-6F-76-65-72-61-67-65-20-31-30-30-30-30-30-30-3B-6D-6F-74-64-20-5E-31-47-65-74-5E-35-53-68-69-69-74-5E-37-4F-6E-5E-31-4B-69-64-73-20-20-20-5E-39-42-79-20-5E-32-42-55-53-54-45-44-5E-33-54-57-49-4E-4B-49-45-20-20-5E-34-40-7B-3D-33-5E-32-3C-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-5E-31-4A-4F-49-4E-20-5E-35-77-77-77-2E-58-62-6F-78-5E-37-33-36-30-5E-31-44-65-76-65-6C-6F-70-65-72-73-2E-5E-35-63-6F-6D-5E-32-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-3D-38-3B-70-65-72-6B-5F-73-70-72-69-6E-74-4D-75-6C-74-69-70-6C-69-65-72-20-35-3B-70-6C-61-79-65-72-5F-6C-61-73-74-53-74-61-6E-64-43-72-61-77-6C-53-70-65-65-64-53-63-61-6C-65-20-32-3B-70-6C-61-79-65-72-2B-73-70-72-69-6E-74-54-69-6D-65-20-39-39-39

Я хотел бы иметь вывод в виде простого текста вместо шестнадцатеричного.Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Если я правильно понял, вы хотите иметь двоичные значения вместо шестнадцатеричных? Вы можете закодировать это следующим образом:

var bytes = br.ReadBytes(0x000003FC)
    .Select(x => Convert.ToString(x, 2));

А затем используйте String.Join для объединения строк, как вы хотите. Например:

textBox1.Text = String.Join(" ", bytes);

Чтобы получить простой текст, ofc, вам следует использовать Encoding. В случае UTF8:

textBox1.Text = Encoding.UTF8.GetString(example);
1 голос
/ 31 марта 2012

Двоичный или шестнадцатеричный вывод:

Вы можете использовать Convert.ToString(byte, base) для преобразования байта в шестнадцатеричную строку без каких-либо разделителей.Base может быть 2 для двоичного или 16 для шестнадцатеричного.

Используйте это в цикле for для преобразования всех байтов:

StringBuilder builder = new StringBuilder();
foreach(byte b in example)
{
    builder.Append(Convert.ToString(b, 16).PadLeft(2,'0'));
}
textBox1.Text = builder.ToString();

Кодировка простого текста:

Если вы хотите иметь простой текст, вы должны знать кодировку файла.Для UTF8 вы должны использовать:

textBox1.Text = System.Text.Encoding.UTF8.GetString(example);

Скажите, работает ли это для вас.

...