![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Pchar и забиение на блоки [D6, D7, WinXP]
Daiwer © (2005-11-12 19:19:00)Есть некоторые данные на которые указывает pchar. Необходимо эти данные разбить на блоки по 4 байта. Преобразование в string не подойдет. Есть какие нибудь мысли? Заранее благодарен.
Zeqfreed (2005-11-13 15:50:00) [1]Daiwer (13.11.05 15:15) [3]
type
TCutCallback = function(block : Cardinal) : Boolean;
...
function CutData(const p : PChar; proc : TCutCallback) : Integer;
var
i : Integer;
block : Cardinal;
begin
i := 0;
if (StrLen(p) >= 4) then repeat
Move(Pointer(Cardinal(p) + i*4)^, block, 4);
Inc(i);
until not proc(block) or (((StrLen(p) div 4) - i) < i);
Result := i;
end;
function Callback(block : Cardinal) : Boolean;
begin
Form1.Memo1.Lines.Add(IntToHex(block, 2));
Result := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('String cut into ' + IntToStr(CutData(#13#10#14#15#16#32#44#66#88#99, Callback)) + ' 4Bytes-pieces');
end;
Примерно так :)
Anton_K (2005-11-13 15:38:00) [2]
var P:PChar;
...
P:=P+4; // двигаем указатель на 4 байта вперед
P:=P-10; // двигаем указатель на 10 байт назад
Daiwer (2005-11-13 15:15:00) [3]так, а как двигать то??
Sergey Masloff (2005-11-12 20:22:00) [4]PChar это указатель. Какая фиг разница на чего он указывает? Двигай указатель шагом N где N хоть 1 хоть 4 хоть сколько байт все вот тебе и разбивка
Anton_K (2005-11-12 20:07:00) [5]А в чем проблемма-то?