Тема: HEX данные
Показать сообщение отдельно
  #9  
Старый 25.11.2011, 21:21
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Совет от Imlike абсолютно правильный! Полностью присоединяюсь.
Но раз возникли трудности- постараюсь помочь.
Итак, здесь прога для чтения файла и его представления в HEX- виде
Кидаешь Edit, Memo и пару кнопок.
С этим все ясно.
Теперь о процедуре чтения файла. Здесь я его открываю как байтовый файл-те за 1 цикл чтения читается 1 байт.
Пишем его в промежут. переменную z.
Далее этот байт представляется в виде HEX-строки из двух символов.
Добавляем его в промежут строковую переменную s
Как только набираем 16 байт- перезаписываем эту строку в Memo1
а саму строку обнуляем. ИТД до конца файла.
Тут надо понять принцип.
Для компьютера любая буква-это такой же байт как и любой другой.
А вот на экране этот байт представляется символом, который берется из таблицы кодировки. Другими словами, все буквы (и цифры) расположены в виде таблицы и поэтому каждой букве соответствует определенный код (те ее номер в этой табл). Вот это преобразование здесь и приведено.

В Memo сделай моноширинный шрифт (Courier New) иначе столбцы будут неровными

Код:
{--выбор файла----------------------}
procedure TForm1.Button2Click(Sender: TObject);
begin
with OpenDialog1 do
    if Execute then Edit1.Text:=FileName;
end;

{--------чтение файла-----------}
procedure TForm1.Button1Click(Sender: TObject);
var
F:file of byte;
z:byte;
s:string;
i:integer;
begin
Memo1.Clear;
s:='';
i:=0;
assignfile(F,Edit1.Text);reset(F);
while not eof(F) do
    begin
    read(F,z);s:=s+IntToHex(z,2)+'  ';
    i:=(i+1) mod 16;
    if (i=0) or eof(F) then
        begin
        Memo1.Lines.Add(s);
        s:='';
        end;
    end;
end;
Ответить с цитированием