Delphi Reverse order of bytes

Deadly 提交于 2019-12-31 01:50:33

问题


I have been trying to write a function that takes two pointers (an input and an output) and writes the bytes from the input into the output in reverse order. So far I have not been able to make it work correctly.

procedure ReverseBytes(Source, Dest: Pointer; Size: Integer);
var
  Index: Integer;
begin
  Move(Pointer(LongInt(Source) + Index)^, Pointer(LongInt(Dest) + (Size - Index))^ , 1);   
end;

Can anyone please suggest a better way of doing this.

Thanks.


回答1:


procedure ReverseBytes(Source, Dest: Pointer; Size: Integer);
var
  Index: Integer;
begin
  for Index := 0 to Size - 1 do
    Move(Pointer(LongInt(Source) + Index)^, 
        Pointer(LongInt(Dest) + (Size - Index - 1))^ , 1);
end;

procedure TForm2.Button2Click(Sender: TObject);
var
  s: AnsiString;
  P: Pointer;
begin
  s := #0'testreverse';
  GetMem(P, Length(s));
  ReverseBytes(Pointer(s), P, Length(s));

  ShowMessage(PAnsiChar(P));   // esrevertset
  FreeMem(P);
end;



回答2:


procedure ReverseBytes(Source, Dest: Pointer; Size: Integer);
begin
  Dest := PByte( NativeUInt(Dest) + Size - 1);
  while (Size > 0) do 
  begin
    PByte(Dest)^ := PByte(Source)^;
    Inc(PByte(Source));
    Dec(PByte(Dest));
    Dec(Size);
  end;
end;


来源:https://stackoverflow.com/questions/12966182/delphi-reverse-order-of-bytes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!