Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевод любого файла в HEX [D7, Win2k, WinXP]


Страницы:   1 2

delphi-coder ©   (2004-10-03 02:06:00) 

Народ, подскажите плиз как cделать так чтобы при открытии файла в Memo текст (если файл текстовый) отображался в виде HEX.


Рыба   (2004-10-04 00:33:00) [1]

>[24]

Просто песня :))


delphi-coder   (2004-10-04 00:13:00) [2]

Спасибо всем я всё понял !!!!


KilkennyCat   (2004-10-03 04:52:00) [3]

да с ними никогда проблем нет :)


default   (2004-10-03 04:22:00) [4]

а сабж утверждает что любого файла(ну типа как у hex-редактора ему надо вид)так что никаких проблем с разделителями нет


KilkennyCat   (2004-10-03 04:05:00) [5]

а не... формат тогда соврет, похоже...


KilkennyCat   (2004-10-03 04:04:00) [6]


> default ©   (03.10.04 04:00) [19]

...или также по четыре Formatом, если чувствительность к ВК нужна.


default   (2004-10-03 04:00:00) [7]

KilkennyCat ©   (03.10.04 03:54) [18]
если размер файла позволяет то можно так
читаем файл целиком
устанавливаем соотв-ую длину TMemo.Text
потом переводим 4-ами со своим IntToHex-ом который нечувствителен к #10#13
и пишем в TMemo.Text


KilkennyCat   (2004-10-03 03:54:00) [8]


> default ©   (03.10.04 03:50) [16]


а не усложняет ли это? мы получим уже два цикла: один читает строки, второй преобразует. И опять же два пункта: мы удерживаем файл открытым дольше, и если все-таки разделители нужны, то мы не сможем сказать, двух- или однобайтовые они были.


default   (2004-10-03 03:51:00) [9]

а лучше свой hex по подобию стандартного сделать где только
#10 #13 в себя же отображаются в таблице


default   (2004-10-03 03:50:00) [10]

KilkennyCat ©   (03.10.04 03:46) [14]
ReadLn а там разбирать


default   (2004-10-03 03:49:00) [11]

KilkennyCat ©   (03.10.04 03:44) [12]
переводить я думаю лучше по 4 байта(пока можно)
а чтоб в цикле то и дело память не перераспред-ась лучше сразу память выделить за раз


KilkennyCat   (2004-10-03 03:46:00) [12]

и кстати, если разделители не трогать, и предположить что файлы могут быть как одоа, так и оа и од, то, вроде как, только побайтово и получится.


KilkennyCat   (2004-10-03 03:44:00) [13]


> default ©   (03.10.04 03:42) [11]


поздно!!! я уже заметил и ответил :)))


KilkennyCat   (2004-10-03 03:44:00) [14]


> default ©   (03.10.04 03:39) [10]

ну не знаю... в какую строку - я сразу в мемо пихнул... мне этот пример нравится тем, что - файл прочитан сразу и брошен, т.е. усе, его можно и другим юзать, а мы могем и с буфером поработать. Да и скорость так вроде больше будет, а? Да и насколько меня учили - работать сразу с файлом нужно только если нужно, а если ненужно - то ненужно, коли буферы существуют.


default   (2004-10-03 03:42:00) [15]

[10]
опс погорячился в последней фразе


default   (2004-10-03 03:39:00) [16]

KilkennyCat ©   (03.10.04 03:37) [9]
пусть автор уточнит
зачем он тогда вообще уточнил что файл текстовый
к тому же переведённые в HEX байты лучше записывать в туже строку а не делать отдельный буфер...


KilkennyCat   (2004-10-03 03:37:00) [17]


> default ©   (03.10.04 03:12) [8]

разве разделители строк к тексту не относятся?


default   (2004-10-03 03:12:00) [18]

[7]
там по байту за раз, к тому же у автора файл текстовый
как я понял нужно преобраз-ть только что между разделителями строк находится(сами разделите не трогать)


KilkennyCat   (2004-10-03 03:02:00) [19]

не сам придумал - готовая примера из делфей.


KilkennyCat   (2004-10-03 03:01:00) [20]

procedure TForm1.Button1Click(Sender: TObject);
var
 iFileHandle: Integer;
 iFileLength: Integer;
 iBytesRead: Integer;
 Buffer: PChar;
 i: Integer;
begin
 if OpenDialog1.Execute then
 begin
   try
     iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
     iFileLength := FileSeek(iFileHandle,0,2);
     FileSeek(iFileHandle,0,0);
     Buffer := PChar(AllocMem(iFileLength + 1));
     iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
     FileClose(iFileHandle);
     for i := 0 to iBytesRead-1 do
     begin
       memo1.Text := memo1.Text + Format('%0x',[integer(Buffer[i])]);// так прикольней.
     end;
   finally
     FreeMem(Buffer);
   end;
 end;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо