zoukankan      html  css  js  c++  java
  • 查看内存数据的函数

    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;
    
  • 相关阅读:
    判断质数
    猜拳三局两胜
    输入年月日判断是这一年的哪一天
    switch case
    猜拳
    判断年月日是否正确
    老狼老狼几点了
    判断是否中奖
    平滑部署war包到tomcat-deploy.sh
    只用120行Java代码写一个自己的区块链-3挖矿算法
  • 原文地址:https://www.cnblogs.com/del/p/1456376.html
Copyright © 2011-2022 走看看