Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

Перевод любого файла в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1096287186
Василий
2004-09-27 16:13
2004.10.17
Импорт из Excel в Delphi7


3-1095536017
dron-s
2004-09-18 23:33
2004.10.17
Как добавить одинаковые данные в две базы


14-1096316144
Друг
2004-09-28 00:15
2004.10.17
Прикол


14-1096452508
MYSTERYO
2004-09-29 14:08
2004.10.17
Розыгрыш от Балтики3. Вот в Краснодаре буквы Л не хватает,


14-1096270280
V-Isa
2004-09-27 11:31
2004.10.17
Конкурс МультиМедиа&Софт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский