Форум: "Начинающим";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];
ВнизРабота с буффером Найти похожие ветки
← →
Новичоккк (2006-03-20 13:25) [0]Есть буффер, создаваемый какой-то функцией. Есть переменные:
var
Buf: Pointer;
Size: Cardinal;
Как получить доступ к определенному байту буффера? Вот так работает:Char(Pointer((Integer(buf)+i))^)
Но смотрится уж больно страшно
Попытался сделать вот так:var
buf
m: array of char;
begin
m:=buf;
m[i]:="A";
...
Но почему-то возникают ошибки при выполнении.
Как быть?
← →
TUser © (2006-03-20 13:28) [1]> Char(Pointer((Integer(buf)+i))^)
> Но смотрится уж больно страшно
Не бойся - это Паскаль. Можешь еще написать так
type
TChars = array of char;
PChars = ^TChars;
var C: PChars;
...
C:=PChars (Buf)
C[i] - это будет твой char
← →
KLAUS © (2006-03-20 13:31) [2]Ну если ты знаешь, адрес этото байта и хочешь его заменить:
PEFile:=tfilestream.Create(Edit1.Text,fmOpenReadWrite);
size:=pefile.Size;
getmem(buf,size);
pefile.Read(buf^,size);
b:=$D2;
pefile.Seek(i,sofrombeginning);
pefile.Write(b,1);
В данном случае i адрес байта
← →
TUser © (2006-03-20 13:34) [3]> KLAUS © (20.03.06 13:31) [2]
Да, если уж на Delphi - то байтик по нужному смещению без TStream никак не заменить, причем почему-то из всех его наследников надо испольовать именно TFileStream. Куда мир катится?
← →
Новичоккк (2006-03-20 13:38) [4]
procedure EditBuf(Buf: Pointer; Size: Cardinal);
type
TChars = array of char;
PChars = ^TChars;
var
m:PChars;
i:integer;
begin
m:=PChars(Buf);
for i:=0 to Size-1 do
begin
if m[i]="X" then ...
end;
end;
Не работает. Пишет "Array type required".
2KLAUS
Спасибо. Попробую воспользоваться этим. Только не очень удобно.
Неужели нельзя работать с буффером, как с массивом?var
buf
m: array of char;
begin
m:=buf;
m[i]:="A";
...
Теоритически m - это ведь указатель на начало массива. Почему все-таки не работает?
← →
Новичоккк (2006-03-20 13:38) [5]
procedure EditBuf(Buf: Pointer; Size: Cardinal);
type
TChars = array of char;
PChars = ^TChars;
var
m:PChars;
i:integer;
begin
m:=PChars(Buf);
for i:=0 to Size-1 do
begin
if m[i]="X" then ...
end;
end;
Не работает. Пишет "Array type required".
2KLAUS
Спасибо. Попробую воспользоваться этим. Только не очень удобно.
Неужели нельзя работать с буффером, как с массивом?var
buf
m: array of char;
begin
m:=buf;
m[i]:="A";
...
Теоритически m - это ведь указатель на начало массива. Почему все-таки не работает?
← →
MBo © (2006-03-20 13:40) [6]var c: PChar;
c:=Buf;
c[i]...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c