Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
1

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

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

Author24 — интернет-сервис помощи студентам
Например есть файл, в НЕХ выглядит так: e9 02 00 08 e9 02
Как прочитать данные с байта по адресу 4 ? Должно получиться 00.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2015, 11:54
Ответы с готовыми решениями:

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

Как считать каждый байт из файла, используя поток?
Исходный файл содержит информацию порциями по 55 байт (пакеты). Необходимо прочитать каждый байт...

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

Считать массив байт записанный на определенной строке в файле
Всем привет, пришел к вам за помощью). Я научился читать любую строку в файле не записывая файл...

25
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
29.07.2015, 12:04 2
Считывай write до 4 байта
0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
29.07.2015, 12:08  [ТС] 3
как? пример можно? пожалуйста
0
northener
29.07.2015, 12:21
  #4

Не по теме:

Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Считывай write
Это как?

0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
29.07.2015, 12:27 5
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  a: array [0..15, 0..15] of integer;
  astr: array [0..15, 0..15] of string;
  d: integer;
 
implementation
 
{$R *.dfm}
 
function CC(n, delitel: integer): string;
var
  r, i: integer;
  a, b: string;
begin
  a:='';
  if (delitel<2) or (delitel>36) then
  showmessage('?????????? ???????? - ??2 ?? 36');
  if n=0 then
  a:='0';
  while n>0 do
  begin
    r:=n mod delitel;
    n:=n div delitel;
    if r<10 then
    b:=inttostr(r)
    else
    b:=chr(ord('A')-10+r);
    a:=b+a;
  end;
 
  if delitel=16 then
  if length(a)=1 then
  a:='0'+a;
  if delitel=2 then
  for i:=0 to 7-(length(a)) do
  a:='0'+a;
  result:=a;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j, k, k2, r, kk, r0, ch: integer;
  s, s2, ks: string;
  t: boolean;
begin
  k:=0;
 
  form1.Memo1.Lines.Clear;
  for j:=0 to 7 do
  begin
    for i:=0 to 7 do
    s:=s+' '+CC(a[j, i], d);
    form1.Memo1.Lines.Add(s);
    s:='';
  end;
 
  s:='';
  s2:='';
  form1.Memo1.Lines.Add('----------------');
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  d:=16;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  f: file;
  buf: array[1..1024] of byte;
  i, j, done: integer;
  s: string;
begin
  Button2.Enabled:=false;
  for i:=1 to 1024 do
  buf[i]:=0;
  i:=0;
  if form1.OpenDialog1.Execute then
  begin
    s:=form1.OpenDialog1.FileName;
    AssignFile(f, s);
    Reset(f, 1);
    done:=FileSize(f);
    i:=0;
//    while not eof(f) do
//    begin
      BlockRead(f, buf, sizeof(buf), done);
      Application.ProcessMessages;
      inc(i);
      Label1.Caption:='Ðàçìåð ôàéëà: '+IntToStr(i)+' ( ~ Êáàéò)';
//    end;
    CloseFile(f);
  end;
  Button2.Enabled:=true;
 
  for j:=0 to 7 do
  for i:=0 to 7 do
  begin
    a[j, i]:=buf[(i+1)+((j)*8)];
    astr[j, i]:=CC(buf[(i+1)+((j)*8)], d);
  end;
  form1.Button1Click(self);
end;
 
end.
Добавлено через 1 минуту
EEjester, northener, ой read чтение из файла
0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
29.07.2015, 12:35  [ТС] 6
ничего не понял.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.07.2015, 13:32 7
в предыдущей теме замени Write на Read и наслаждайся
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
29.07.2015, 13:48 8
EEjester, в примере все есть читает первые байты из файла и выводит в мемо в 16 коде
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.07.2015, 14:27 9
Игорь[Igor],
Application.ProcessMessages; вместо Label.Repaint; это вредительство
0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 07:10  [ТС] 10
Делаю так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
function FileReadBit(FileName: String): string;
var
  fs : TFileStream;
  b : string;
begin
  fs := TFileStream.Create(FileName, fmOpenRead);
  fs.Seek(1, soFromBeginning);
  fs.Read(b,1);
  Result := b;
  fs.free;
end;
Использую так:
Delphi
1
Edit1.Text := FileReadBit('C:\1.txt');
Выдает ошибку такую при чтении:
Миниатюры
Считать байт по адресу в файле  
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
30.07.2015, 07:20 11
b:byte и b:string - это не одно и то же, правда?

string - это указатель на место, где может быть строка
но пока кто-то ее туда не положит, там ничего нет
ты записываешь 1 байт по адресу, где лежит этот указатель
он начинает указывать на Х.З. какую область памяти, о чем и сообщает система, когда пытается прочитать там строку

для чтения текстовых файлов вместо TFileStream пользуйся TStreamReader;
у него есть метод ReadLine. читает одну строку.
s:=st.ReadLine;
0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 08:07  [ТС] 12
ну не получается!!!! дайте пример пожалуйста.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
30.07.2015, 09:19 13
Лучший ответ Сообщение было отмечено EEjester как решение

Решение

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
33
34
procedure TForm1.b1Click(Sender: TObject);
var
  st:TStreamWriter;
  fname:string;
begin
  fname := ExtractFilePath(ParamStr(0))+'test.txt';
  st:=TStreamWriter.Create(Fname, false, TEncoding.UTF8);
  try
    st.WriteLine('Строка 1');
    st.WriteLine('Строка 2');
    st.WriteLine('Строка 3');
    ShowMessage('Записано 3 строки');
  finally
    st.Free;
  end;
 
end;
 
procedure TForm1.b2Click(Sender: TObject);
var
  st:TStreamReader;
  fname:string;
begin
  fname := ExtractFilePath(ParamStr(0))+'test.txt';
  st:=TStreamReader.Create(Fname, TEncoding.UTF8);
  try
    m1.Lines.Add(st.ReadLine);
    m1.Lines.Add(st.ReadLine);
    m1.Lines.Add(st.ReadLine);
    ShowMessage('Прочитано 3 строки');
  finally
    st.Free;
  end;
end;
Миниатюры
Считать байт по адресу в файле  
0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 10:18  [ТС] 14
Мне нужно именно по определенному адресу.
Цитата Сообщение от EEjester Посмотреть сообщение
Например есть файл, в НЕХ выглядит так: e9 02 00 08 e9 02
Как прочитать данные с байта по адресу 4 ? Должно получиться 00.
0
northener
30.07.2015, 10:47
  #15

Не по теме:

Цитата Сообщение от EEjester Посмотреть сообщение
Мне нужно именно по определенному адресу.
Тогда тебе надо просить не пример, а полностью готовый код. Примеров тебе уже надавали уйму. Но ты их не понимаешь или не хочешь их понимать.

0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 11:10  [ТС] 16
Цитата Сообщение от northener Посмотреть сообщение
Но ты их не понимаешь или не хочешь их понимать
почему? https://www.cyberforum.ru/post7924466.html
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
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, :D пробелы посчитай

0
1 / 1 / 5
Регистрация: 28.03.2013
Сообщений: 299
30.07.2015, 13:37  [ТС] 19
готовый код пожалуйста. я не понимаю этого и все
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
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
30.07.2015, 13:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2015, 13:48
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru