![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод любого файла в HEX [D7, Win2k, WinXP]
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;