Delphi - 反转内存的函数

ContractedBlock.gif ExpandedBlockStart.gif Code
//按单字节反转内存的函数
procedure ReverseMemory(P: PByte; Len: Integer); overload;
var
  B: Byte;
  P2: PByte;
begin
  P2 :
= P;
  Inc(P2, Len 
- 1);
  
while P < P2 do
  
begin
    B :
= P^;
    P^ :
= P2^;
    P2^ :
= B;
    Inc(P);
    Dec(P2);
  
end;
end;

//按双字节反转内存的函数
procedure ReverseMemory(P: PWord; Len: Integer); overload;
var
  W: Word;
  P2: PWord;
begin
  P2 :
= P;
  Inc(P2, Len 
div 2 - 1);
  
while Integer(P) < Integer(P2) do
  
begin
    W :
= P^;
    P^ :
= P2^;
    P2^ :
= W;
    Inc(P);
    Dec(P2);
  
end;
end;

//按四字节反转内存的函数
procedure ReverseMemory(P: PInteger; Len: Integer); overload;
var
  I: Integer;
  P2: PInteger;
begin
  P2 :
= P;
  Inc(P2, Len 
div 4 - 1);
  
while Integer(P) < Integer(P2) do
  
begin
    I :
= P^;
    P^ :
= P2^;
    P2^ :
= I;
    Inc(P);
    Dec(P2);
  
end;
end;

//调用测试
procedure TForm1.Button1Click(Sender: TObject);
var
  bs: TBytes;
  i: Integer;
begin
  SetLength(bs, 
8);
  
for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ShowMessage(StringOf(bs)); 
{12345678}

  
for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ReverseMemory(PByte(bs), Length(bs));
  ShowMessage(StringOf(bs)); 
{87654321}

  
for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ReverseMemory(PWord(bs), Length(bs));
  ShowMessage(StringOf(bs)); 
{78563412}

  
for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ReverseMemory(PInteger(bs), Length(bs));
  ShowMessage(StringOf(bs)); 
{56781234}
end;

转载于:https://www.cnblogs.com/jxgxy/archive/2009/11/13/1602336.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值