Delphi Tips 
-----------------------------

0298  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2000/03/25 濱野 rev 1.3
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2000/03/28 濱野 編集
あるアドレスを基点とした、変位のアドレスの参照

バイト列を処理する場合、あるアドレスを基点に
そこから+nバイト目を数バイトずつ処理したい場合があります。
特に文字処理や画像処理ではこの様なことは頻繁に行われます。

Cであれば(p+1)* = '\0'; といったアドレッシングを行えますが、
Pascalでは強引な型キャストでも行わない限りこのような書き方は
行えません。

Pchar(Integer(p) + n)^ := #0;

のようになってしまいます。Integerとポインタのサイズが同じ
であるので、このような書き方でも通ります。
しかし、WORD,DWORDなどもっと大きな型の場合SizeOfなどを使っ
て型のサイズを意識した書き方を行わなければなりません。

PWORD(Integer(pw) + Sizeof(WORD) * n)^ := 0;

このような場合、必要なサイズ分の配列のポインタ型を定義して
やり、その変数に代入することでかなり近い事が行える様になり
ます。

例では、'Delphi 'という文字を、10回繰り返し配列
にセットしています。


type
  CharArray = array[0..6] of char;
  PCharArray = ^CharArray;
var
  p: array[0..100] of Char;
  C: PCharArray;
  I : Integer;
begin
  C := @p;
  for I := 0 to 9 do
  begin
     C^[0] := 'D';
     C^[1] := 'e';
     C^[2] := 'l';
     C^[3] := 'p';
     C^[4] := 'h';
     C^[5] := 'i';
     C^[6] := ' ';
     Inc(C);
  end;
  C^[0] := #0;
  Edit1.Text := StrPas(p);
参照: <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp