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

Вниз

Чтение hex-файла   Найти похожие ветки 

 
Pattern   (2003-11-07 14:20) [0]

Как прочитать содержимое hex-файла с начального адреса home_addr_ равного 0Ah и длиной len_byte_ равному 0FA5h или с того же начального адреса и до конца файла? И какого типа должны быть эти переменные, чтобы им задать эти данные? Но самое каверзное, какого типа переменные должны быть result1_ и result2_, которые получат эти данные?
var
F: File of Byte;
place_: String;
home_addr_, len_byte_: Byte; //?????
result1_, result2_: ??????
begin
place_ := "c:\myfile.ext";
AssignFile(F, place_);
Reset(F);
//Результат считывания с начального адреса на длину смещения
result1_ := ????
while not Eof(F) do
begin
//Результат считывания с начального адреса до конца файла
result2_ := ????
end;
end;

Большое спасибо за помощь!


 
Zaratustra   (2003-11-07 14:39) [1]

Result* - byte если один байт
home_addr_ - byte
len_byte_ - word или если размер файла больше 65535 то integer
Вроде так...


 
Palladin   (2003-11-07 14:52) [2]

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


 
Pattern   (2003-11-07 15:14) [3]

Спасибо!!! Дело в том, что Result* никак не могут быть Byte, ибо в них считывается не один байт, а какое-то количество. Дело в том, что в них так и будут содержаться эти массивы считанных байт. Это то что касается переменных. А что по поводу функций/процедур? Дело в том, что конечно это можно всё можно решить своим каким то "топорным" методом. Но зачем изобретать колесо? Может эти функции уже существуют?


 
Palladin   (2003-11-07 15:18) [4]

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


 
Pattern   (2003-11-07 15:23) [5]

То есть другими словами, делать нужно всё в ручную. Почему то я так и думал, но всё таки решил удостовериться очередной раз... На всякий случай... d;-) Всё понятно! В принципе я ответами полностью удовлетворён!!! Спасибо за помощь!!!!


 
Anatoly Podgoretsky   (2003-11-07 15:59) [6]

В Борланде и Микрософте не знаю о твоих желаниях, размерах частец и типах данных. Используй TFileStream и два динамических массива, будет проще, сделаешь двумя командами, не считая открытия и закрытия файлов. Если есть пробелы при работе с файлами, то сходи в Королевство Дельфи в Лицей, там есть серия статей по этому поводу.


 
panov   (2003-11-07 16:49) [7]

Как вариант - использовать TMemoryStream.
О несомненных плюсах читай в Help(Например, метод LoadFromFile).
О минусах думай сам.


 
Pattern   (2003-11-07 22:37) [8]

Я именно через TStream и делаю... Что касается LoadFromFile, то всё таки предпочитаю LoadFromStream и SaveToStream... Лишний раз фрагметировать файлы по диску - тормозить работу программы... А тут прямая работа с потоком...


 
panov   (2003-11-07 23:03) [9]

Причем здесь фрагментация?
Ведь речь идет о чтении, а не о записи.
Удобство TMemoryStream в том, что у тебя файл загружен целиком и нет необходимость перечитывать его несколько раз. Работа с указателями упрощается.

А для получения данных любого типа из участка памяти(вплоть до различных структур) достаточно воспользоваться функцией move.


 
Lmz   (2003-11-07 23:39) [10]

Пойди в начальную школу и выучи основы информатики.

Потом найди книгу Тейксера и Пачеко и почитай


 
Pattern   (2003-11-08 04:28) [11]

to panov
> Причем здесь фрагментация?
> Ведь речь идет о чтении, а не о записи.

Согласен. Но какая разница, хоть LoadFromFile, хоть SaveToFile - операции всё равно с диском ведутся. А если всё таки придётся что то записать/пепреписать? И вообще спор ни о чём идёт. Я же сказал что stream и использую.



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

Форум: "Основная";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
3-65740
saperxl
2003-10-31 20:32
2003.11.20
Пароль к SYSDBA в InterBase


6-66047
HimA
2003-09-22 13:58
2003.11.20
IP-адрес


1-65851
ZioN
2003-11-09 22:14
2003.11.20
данные в variant


4-66175
serjant
2003-09-24 12:19
2003.11.20
как из программы узнать, какой у неё PID?


7-66145
-=Vlad=-
2003-09-11 10:24
2003.11.20
ISDN D-канал





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский