查看内存数据的函数


unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



{用十六进制查看内存的函数; 参数1是内存起点, 参数2是以字节为单位的长度}

function ToHex(p: PByteArray; b: Integer): string;

var

  i: Integer;

begin

  for i := 0 to b - 1 do

    Result := IntToHex(p^[i], 2) + Chr(32) + Result;

  Result := TrimRight(Result);

end;



{用二进制查看内存的函数; 参数1是内存起点, 参数2是以字节为单位的长度}

function ToBin(p: PByteArray; b: Integer): string;

const

  Convert: array['0'..'F'] of string = (

    '0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001',

    '', '', '', '', '', '', '', '1010', '1011', '1100', '1101', '1110', '1111');

var

  i: Integer;

  s: string;

begin

  s := ToHex(p, b);

  for i := 1 to Length(s) do

    if s[i] <> Chr(32) then

      Result := Result + Convert[s[i]]

    else

      Result := Result + Chr(32);

end;



{测试一}

procedure TForm1.Button1Click(Sender: TObject);

var

  num: Integer;

begin

  Randomize;

  num := Random(MaxInt);

  ShowMessage(IntToStr(num) + #10#13#10#13 +

              ToHex(@num, 4) + #10#13#10#13 +

              ToBin(@num, 4));

end;



{测试二}

procedure TForm1.Button2Click(Sender: TObject);

var

  str: string;

begin

  str := 'Delphi 2010';

  ShowMessage(str + #10#13#10#13 +

              ToHex(@str[1], Length(str)*SizeOf(str[1])) + #10#13#10#13 +

              ToBin(@str[1], Length(str)*SizeOf(str[1])));

end;



end.


 
   

重写:


function ToBin2(p: PByteArray; b: Integer): string;

var

  i,j: Integer;

begin

  Result := StringOfChar('0', b * 8);

  for i := 0 to b - 1 do for j := 0 to 7 do

    if Odd(p^[b-1-i] shr j) then Result[i*8 + 8 - j] := '1';

end;



procedure TForm1.Button1Click(Sender: TObject);

var

  f: Single;

  str: string;

begin

  f := -31.4;

  str := ToBin2(@f, SizeOf(f));

  Memo1.Lines.Add(str);

end;


 
   

你可能感兴趣的:(内存)