Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1142671765
Der Nechk@ssoff
2006-03-18 11:49
2006.04.02
рисунок на кнопке


2-1142491738
Scavenger
2006-03-16 09:48
2006.04.02
Менять цвет шрифта на кнопочке


15-1141910027
Pazitron_Brain
2006-03-09 16:13
2006.04.02
Что я делаю не так?


3-1137394111
Сабач
2006-01-16 09:48
2006.04.02
Замена значений


15-1142263338
oldman
2006-03-13 18:22
2006.04.02
Вопросик ИШ (в тему...)





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