Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
EEjester
1 / 1 / 0
Регистрация: 28.03.2013
Сообщений: 299
#1

Считать байт по адресу в файле - Delphi

29.07.2015, 11:54. Просмотров 1220. Ответов 25
Метки нет (Все метки)

Например есть файл, в НЕХ выглядит так: e9 02 00 08 e9 02
Как прочитать данные с байта по адресу 4 ? Должно получиться 00.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2015, 11:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считать байт по адресу в файле (Delphi):

Reg_binary. Считать первые 10 байт - Delphi
считывать весь параметр сильно муторно, так как данные в нем представляют внушающий размер. как то можно считать первые 10 байт инфы? ...

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

в файле input.txt задана вещественно значимая матрица 3×4 считать эту матрицу в компонент stringrid - Delphi
в файле input.txt задана вещественно значимая матрица 3×4 считать эту матрицу в компонент stringGrid. Найти среднее арифметическое...

Считать один байт по адресу $0001:$0231 из памяти компьютера - Pascal ABC
как в Паскале считать один байт по адресу $0001:$0231 из памяти компьютера (привести участок программы и пояснить используемые переменные)

Посчитать в файле количество нулевых байт и различных байт - C++
Посчитать в файле кол-во нулевых байт и различных байт Кто решит буду весьма благодарен!:drink:

Переход по адресу из массива байт - C++
не знаю просто как правильно назвать тему до форматирования пк была у меня она очень интересная функция в общем есть допустим любой...

25
EEjester
1 / 1 / 0
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 11:10  [ТС] #16
Цитата Сообщение от northener Посмотреть сообщение
Но ты их не понимаешь или не хочешь их понимать
почему? Считать байт по адресу в файле
0
krapotkin
2663 / 2539 / 640
Регистрация: 14.04.2014
Сообщений: 12,254
Записей в блоге: 7
30.07.2015, 12:35 #17
тут все уже отчаялись угнаться за метаниями пули в твоей голове

если тебе надо считать байт, читай байт, пример уже давали
Delphi
1
2
3
b:byte;
seek(N, ...);
read(b,1);
но какое отношение имеет вот это
Цитата Сообщение от EEjester Посмотреть сообщение
Delphi
1
2
3
4
5
function FileReadBit(FileName: String): string;
var
  fs : TFileStream;
  b : string;
begin
к чтению байта ??
b:string;
ЧТО ТЕБЕ НУЖНО??

Цитата Сообщение от "EEjester
файл, в НЕХ выглядит так: e9 02 00 08 e9 02
Как прочитать данные с байта по адресу 4 ? Должно получиться 00.
даже тут у меня по адресу 4 не получается 00
0000 - e9
0001 - 02
0002 - 00
0003 - 08
0004 - e9
0005 - 02
0
Игорь[Igor]
30.07.2015, 13:07
  #18

Не по теме:

krapotkin, пробелы посчитай

0
EEjester
1 / 1 / 0
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 13:37  [ТС] #19
готовый код пожалуйста. я не понимаю этого и все
0
Игорь[Igor]
716 / 471 / 53
Регистрация: 24.12.2008
Сообщений: 3,901
30.07.2015, 13:48 #20
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s:='00';
 
  ShowMessage('По адресу 4 находится "'+s+'"');
 
end;
0
Cyborg Drone
Модератор
4715 / 2882 / 1123
Регистрация: 17.08.2012
Сообщений: 9,183
30.07.2015, 17:21 #21
Цитата Сообщение от EEjester Посмотреть сообщение
e9 02 00 08 e9 02
Цитата Сообщение от EEjester Посмотреть сообщение
данные с байта по адресу 4 ? Должно получиться 00.
Это который байт номер 4?
Этот, который и не байт вовсе, а не пойми что, то ли ниббл, что суть $0, то ли явно не $00, а $30:
e9 02 00 08 e9 02
или этот
e9 02 00 08 e9 02
который, если по-человечески считать, то есть, с начала строки, а не с конца, либо третий (если считать от 1) либо второй (если считать от 0), но уж никак не четвёртый.

00 получается, если считать с конца строки, но так в нормальных дурдомах не делают. Всё же как-то принято в Европе слева направо считать, не китайцы, чай. Ещё подумал, может, у Вас в файл пишутся 16-битные слова младшим байтом вперёд, а читаются байты, но... Опять как-то не сходится.

Народ, я чего-то не понимаю, или всё же пора мне, для профилактики, снова за счётные палочки браться?
0
EEjester
1 / 1 / 0
Регистрация: 28.03.2013
Сообщений: 299
31.07.2015, 07:09  [ТС] #22
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s:='00';
ShowMessage('По адресу 4 находится "'+s+'"');
end;
: \

Добавлено через 37 минут
Получилось!!! Мож кому надо:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function StrToHex(source: String): String;
var i:integer;
    c:Char;
    s:String;
begin
    s := '';
    for i:=1 to Length(source) do
    begin
      c := source[i];
      s := s +  IntToHex(Integer(c),2)+' ';
    end;
    result := s;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  MaxLen = 128;
var
  f:file;
  s:string[MaxLen];
  Cnt : Integer;
begin
  if not opendialog1.execute then Exit;
  AssignFile(f, opendialog1.FileName);
  FileMode:=fmOpenRead;
  Reset(f,1);
  Seek(f, 4);
  blockread(f,s[1], 1, Cnt);
  SetLength(s, Cnt);
  closefile(f);
  edit1.text:=StrToHex(s);
end;
0
krapotkin
2663 / 2539 / 640
Регистрация: 14.04.2014
Сообщений: 12,254
Записей в блоге: 7
31.07.2015, 07:15 #23

Не по теме:

не знаю, как смайлик facepalm изобразить. но он вот тут


в строку длиной MaxLen мы считываем 1 байт
а чем изначально байт-то не угодил???
integer(C) - это 4 байта, 3 из которых ==0. т.е. остается тот самый изначальный байт из самого первого примера...

Не по теме:

facepalm again

0
Cyborg Drone
31.07.2015, 07:21
  #24

Не по теме:

krapotkin, = :facepalm:

0
EEjester
1 / 1 / 0
Регистрация: 28.03.2013
Сообщений: 299
31.07.2015, 07:38  [ТС] #25
del...

Добавлено через 1 минуту
Цитата Сообщение от krapotkin Посмотреть сообщение
а чем изначально байт-то не угодил???
твой пример не работал, мой работает.
0
krapotkin
2663 / 2539 / 640
Регистрация: 14.04.2014
Сообщений: 12,254
Записей в блоге: 7
31.07.2015, 08:55 #26
бедняжка, не работает...
а скриншоты я очевидно в фотошопе рисовал )))

пора уже раскрыть тебе тайну, что не все йогурты даже текстовые файлы одинаковы
некоторые каждый символ кодируют в 1 байт, тогда в файле может быть использовано только 256 разных символов, для интернациональных текстов с ударениями и диакритическими знаками этого маловато
поэтому для них изобрели много! UNICODE кодировок, где каждый символ кодируется 1, 2, 3 или даже 4 байтами!
Уфф.
Для того, чтобы разбираться, что за текстовый файл нам подсунули, стандарты рекомендуют в начало файла писать заголовок, опять 2.3.4 байта, тьфу. Подробности
На текущий момент у нас тут фактическим стандартом стала кодировка UTF-8 и в этом случае в начало файла пишутся 3 байта $ef $bb $bf, после которых начинается само содержимое, латинские символы и цифры - 1 байт, остальные - 2!
специально для работы с файлами в разных кодировках можно указывать в конструкторах потомков TFileStream параметр TEncoding
и именно поэтому доисторические варианты Reset() Assign() FileOpen() сейчас стараются не применять...

а теперь специально повторю фрагмент и скриншот
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Readbytes;
var
  fs : TFileStream;
  b : byte;
  fname:string;
  i:Integer;
begin
  fname := ExtractFilePath(ParamStr(0))+'test.txt';
  fs := TFileStream.Create(FName, fmOpenRead);
  for i := 0 to 8 do
  begin
    // вот Seek в этом конкретном примере не нужен, т.к. каждое чтение и так двигает
    // указатель на 1 байт вперед, но когда нам надо прочитать отдельный N-й байт файла, это пригодится
    fs.Seek(i, soFromBeginning); 
    fs.Read(b,1);
    m1.Lines.Add(IntToStr(i)+'-й байт = $'+IntToHex(b,2));
  end;
  fs.free;
end;
получается, что даже если ты знаешь, что у тебя в тексте буква "я" стоит третьей от начала, ты абсолютно не в курсе какой байт читать и сколько, чтобы её прочитать из этого текстового файла...
0
Миниатюры
Считать байт по адресу в файле  
31.07.2015, 08:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 08:55
Привет! Вот еще темы с ответами:

Какой байт находится по адресу 1ABD0h после выполнения следующих действий - Assembler
В регистрах следующие значения: DS: 1000h, EAX: 7934FFFFh, EBX: 00001234, EDX: 0000ABCDh. Процессор Pentium II работает в реальном режиме....

Считать из файла по адресу - C++
в Мемо1 мы записываем адрес состоящий из цифр от 01 до 12 которые соответствуют номеру строки и колонки в таблице как сделать чтобы в Мемо2...

Считать значение из процесса по его адресу - C#
Приветствую, есть некая игра, мне нужно вытащить из этой игры значение HP, я знаю что это значение располагается по адресу = 0x14A2CB38. ...

Как считать данные по известному адресу? - FASM
Как считать данные по адресу 0x000FCD40? Почитав статьи должно вроде как быть так? mov edx, 000FCD40h а как вывести содержимое регистра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru