我正在使用Delphi5。我定义了一个字节数组,如下所示:
CapsLock
如何将其转换为PByte指针?
答案 0 :(得分:5)
执行此操作的两种方法:
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
请注意,如果启用了范围检查并且数组为空,则前者会导致范围错误。因此,我倾向于后者,尽管您可能会因为缺乏类型安全性而批评直接指针转换。
答案 1 :(得分:5)
动态数组被实现为指针,因此您可以按原样键入它:
var
Buffer: array of Byte;
P: PByte;
begin
SetLength(Buffer, ...);
P := PByte(Buffer);
...
end;
如果您不想依赖于此实现细节,则可以取数组中第一个字节的内存地址:
P := @Buffer[0];