如何实现把整形236006660高位移到低位后变成70062350?

解决方案 »

  1.   


    function ConvetLH(Num: Integer): Integer;
    var
      Arr, Brr: array of Byte;
      s: string;
      B: Byte;
      I: Integer;
    begin
      s := InttoStr(Num);
      SetLength(Arr, 4);
      CopyMemory(Arr, @Num, 4);
      SetLength(Brr, 4);
      for I := High(Arr) downto Low(Arr) do
      begin
        Brr[3-I] := Arr[I];
      end;
      Result := PInteger(Brr)^;
    end;{To Do...}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(InttoStr(ConvetLH(236006660)) + ' - 70062350');
    end;
      

  2.   

    function ChangeOrder1(I: Integer): Integer;
    begin
      Result := (I shr 24) + (I shr 8) and $0000FF00 + (I shl 8) and $00FF0000 + (I shl 24) and $FF000000
    end;function ChangeOrder2(I: Integer): Integer;
    var
      P: PByte;
    begin
      P := PByte(@I);
      Result := P^ shl 24;
      Inc(P);
      Inc(Result, P^ shl 16);
      Inc(P);
      Inc(Result, P^ shl 8);
      Inc(P);
      Inc(Result, P^)
    end;function ChangeOrder3(I: Integer): Integer;{速度最快}
    asm
      push eax
      xchg [esp+3],al
      mov [esp],al
      mov cl,[esp+2]
      mov [esp+2],ah
      mov [esp+1],cl
      pop eax
    end;
      

  3.   

    楼上厉害。还可以这样:function ConvetLH(Num: Integer): Integer;
    begin
      Result := Num div (1 shl 24) + Num mod (1 shl 24) div (1 shl 16) shl 8
        + Num mod (1 shl 16) div (1 shl 8) shl 16 + Num mod 256 shl 24;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('236006660高位移到低位后变成:'+InttoStr(ConvetLH(236006660)));
    end;
      

  4.   

    就是字节逆序:function Bswap32(N: cardinal): cardinal;
    asm
      bswap eax
    end;
      

  5.   

    我也来显丑了uses WinSock;procedure TForm1.Button2Click(Sender: TObject);
    var
      i:Integer;
    begin
      i:=236006660;
      i:=htonl(i);
      ShowMessage(IntToStr(i));
    end;
      

  6.   

    还可以这样(3楼的使用了内存单元寻址,慢):
    function ChangeOrder(I: Integer): Integer;
    asm
      mov cl,ah
      mov ch,al
      shl ecx,16
      shr eax,16
      mov cl,ah
      mov ch,al
      mov eax,ecx
    end;