一个查看内存数据的Delphi函数

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; bit: Integer): string;
var
  i: Integer;
begin
  for i := 0 to bit - 1 do
    Result := IntToHex(p^[i], 2) + Chr(32) + Result;
  Result := TrimRight(Result);
end;

{用二进制查看内存的函数; 参数1是内存起点, 参数2是以字节为单位的长度}
function ToBin(p: PByteArray; bit: 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, bit);
  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;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存
, string
, integer
, result
, str
, delphi2010
procedure
delphi 查看虚拟内存、delphi 内存数据库、delphi 读取内存数据、内存数据查看工具、xcode 查看内存数据,以便于您获取更多的相关知识。

时间: 2024-11-03 15:21:01

一个查看内存数据的Delphi函数的相关文章

增加一个判断内存变量存在的函数

变量|函数   笔者在开发应用系统中曾经用FoxPro的on error语句编写了一个判断内存变量的函数Exist(),非常方便实用,在此介绍给大家. 设计思路:先假设内存变量存在,然后将待判断的内存变量赋值给一个临时变量,若该内存变量不存在,则执行时必将出错,出错时将执行on error语句,只要在on error处理的函数中修改内存变量存在与否的标志即可.为了不影响调用程序的错误处理,保证该函数的通用性,在函数执行前后必须保存和恢复调用程序可能的错误处理. 源程序如下: ***EXISTP

c#中用windows api函数修改内存数据

这个问题来自伴水的<划拳机器人>,对本文用途感兴趣的朋友请大致阅读伴水的帖子,在帖子中我用这个方法写了剪刀五号,战绩不错,当然属于作弊的方法了. 剪刀五号的思路就是每次出拳,尽量让对方能赢,然后根据一个地址段来扫描内存中对方所赢的局数的保存地址,找到后在得到比赛结果时把内存数据改掉.这个类似以前打单机游戏时用的fpe之类的修改工具.当然,如果对方故意犯规,一局也不赢,你是找不到他的地址的,这样可以通过正常途径来获取胜利. 把剪刀五号核心代码简化后,主要为三个api函数 OpenProcess,

指针-一个动态内存分配的问题,函数执行后p指向哪里?

问题描述 一个动态内存分配的问题,函数执行后p指向哪里? 一下是我的代码: #include<stdio.h> #include<stdlib.h> #include<string.h> char *strcnp(char *sd,char *ds) { char *q=sd; while((*ds++=*sd++)!='') NULL; return q; } int main() { char *a[4]={"abc","def&quo

c++builder问题-一个Delphi函数改用C++Builder6

问题描述 一个Delphi函数改用C++Builder6 有一个读IC卡的函数是用Delphi写的,想用C++Builder6改写请问怎么改写,本人没有分了,请有谁能改写出来,本人将感激不尽谢谢!! Type TBitCount = (Bit_8 =8Bit_16=16Bit_32=32); TArr = Array of byte; 定义Tarr bytRcvData: TArr; bytRcvLen :integer; setlength(bytRcvData 512); 这个是什么意思??

如何查看Oracle数据表的建表语句

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to

如何查看Oracle数据表的建表语句?

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to 

获取字符串中某一个字段的数据,GetValueFromStr;拓展字符串解析parse_string

gps数据格式为:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A* /********************************************************************** *版权所有 (C)2015, Wuyq. * *文件名称: GetValueFromStr.c *内容摘要:用于演示从gps数据字符串中获取相应的内容 *其它说明:无 *当前版本: V1.0 *作

网络数据包捕获函数库Libpcap安装与使用(非常强大)

1.Libpcap简介 Libpcap是Packet Capture Libray的英文缩写,即数据包捕获函数库.该库提供的C函数接口用于捕捉经过指定网络接口的数据包,该接口应该是被设为混杂模式.这个在原始套接子中有提到. 著名的软件TCPDUMP就是在Libpcap的基础上开发而成的.Libpcap提供的接口函数实现和封装了与数据包截获有关的过程. Libpcap提供了用户级别的网络数据包捕获接口,并充分考虑到应用程序的可移植性.Libpcap可以在绝大多数Linux平台上运行.在Window

c-如何修改正在运行中程序的内存数据

问题描述 如何修改正在运行中程序的内存数据 就拿最原始的HelloWorld程序来说,如果我加入一个循环输出(作为程序A),让它每秒输出1次helloworld,我再写个程序B,如何让正在运行的程序A的输出变成"111111111"呢? 解决方案 http://www.tuicool.com/articles/Ij2Yfyhttp://blog.csdn.net/shifters/article/details/6750353 解决方案二: 用WriteProcessMemory可以修