Копирование памяти со смещением в Delphi

Я хочу скопировать блок памяти со смещением, возможно ли это?

Это код, который у меня есть до сих пор:

const
  SOURCE: array [0..5] of Byte = (, , , , , );
var
  Destination: Pointer;
begin
  // This is a full copy
  Move(SOURCE, Destination^, SizeOf(SOURCE));

  // If i want to copy from the third byte, is it possible?
  // I imagine the code should be, but it cannot be compiled.
  Move(Slice(SOURCE^, {Offset=}2)^, Destination^, SizeOf(SOURCE) - 2);
end;

2 ответов


не совсем ясно, чего вы хотите достичь, но похоже, что

MoveMemory(pointer(NativeUInt(Destination) + 2), @SOURCE[0], SizeOf(SOURCE) - 2)

хотя я подозреваю, что вы на самом деле хотите

MoveMemory(pointer(NativeUInt(Destination) + 2), @SOURCE[2], SizeOf(SOURCE) - 2)

использовать Move() чтобы скопировать часть массива, сделайте это так:

Move(SOURCE[Offset], Destination^, SizeOf(SOURCE)-Offset);