Как преобразовать массив байтов в PByte в Delphi? - PullRequest
1 голос
/ 21 мая 2019

Я использую Delphi 5. Я определяю массив байтов следующим образом:

Buffer: Array of BYTE;

Как преобразовать его в указатель PByte?

Ответы [ 2 ]

6 голосов
/ 21 мая 2019

Динамический массив реализован в виде указателя, поэтому вы можете просто привести его к типу как есть:

var
  Buffer: array of Byte;
  P: PByte;
begin
  SetLength(Buffer, ...);
  P := PByte(Buffer);
  ...
end;

Если вы не хотите полагаться на эту деталь реализации, вы можете вместо этого взятьадрес памяти 1-го байта в массиве:

P := @Buffer[0];
6 голосов
/ 21 мая 2019

Два способа сделать это:

var
  P: PByte;
....
P := @Buffer[0]; // no cast, compiler can check type safety
P := PByte(Buffer); // implementation detail, dynamic array variable is pointer to first element

Обратите внимание, что первый приводит к ошибке диапазона, если включена проверка диапазона и массив пуст.Из-за этого я предпочитаю последнее, хотя вы можете критиковать приведение прямого указателя за отсутствие безопасности типов.

...