Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Перевод любого файла в HEX   Найти похожие ветки 

 
delphi-coder   (2004-10-03 02:06) [0]

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


 
Sergey_Masloff   (2004-10-03 02:12) [1]

Читай по 4 байта и IntToHEX() - например.


 
GanibalLector ©   (2004-10-03 02:22) [2]

function IntToHex(Value: Integer; Digits: Integer): string;
Т.е. предварительно прийдется переводить символы в то


 
KilkennyCat ©   (2004-10-03 02:23) [3]


> Sergey_Masloff   (03.10.04 02:12) [1]


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


 
default ©   (2004-10-03 02:31) [4]

KilkennyCat ©   (03.10.04 02:23) [3]
FileSizeInBytes div 4 по 4 и FileSizeInBytes mod 4 в конце


 
GanibalLector ©   (2004-10-03 02:38) [5]

2 default
FileSizeInBytes div 4 по 4 и FileSizeInBytes mod 4 в конце
КрасивA $)


 
KilkennyCat ©   (2004-10-03 03:01) [6]

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;


 
KilkennyCat ©   (2004-10-03 03:02) [7]

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


 
default ©   (2004-10-03 03:12) [8]

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


 
KilkennyCat ©   (2004-10-03 03:37) [9]


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

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


 
default ©   (2004-10-03 03:39) [10]

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


 
default ©   (2004-10-03 03:42) [11]

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


 
KilkennyCat ©   (2004-10-03 03:44) [12]


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

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


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


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


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


 
KilkennyCat ©   (2004-10-03 03:46) [14]

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


 
default ©   (2004-10-03 03:49) [15]

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


 
default ©   (2004-10-03 03:50) [16]

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


 
default ©   (2004-10-03 03:51) [17]

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


 
KilkennyCat ©   (2004-10-03 03:54) [18]


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


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


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

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


 
KilkennyCat ©   (2004-10-03 04:04) [20]


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

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


 
KilkennyCat ©   (2004-10-03 04:05) [21]

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


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

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


 
KilkennyCat ©   (2004-10-03 04:52) [23]

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


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

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


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

>[24]

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



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.042 c
1-1096495482
Miron
2004-09-30 02:04
2004.10.17
Странно работает FindFirst


4-1095240975
xman
2004-09-15 13:36
2004.10.17
HDD


1-1096315991
ancot
2004-09-28 00:13
2004.10.17
Огромный массив объектов


14-1096012323
clickmaker
2004-09-24 11:52
2004.10.17
Глюки DNS на 2000 advanced сервере


6-1092175681
НовиЧок
2004-08-11 02:08
2004.10.17
Помогите избавиться от загрузки картинок при просмотре страницы в