Help~十六进制显示问题 ( 积分: 50 )

  • 主题发起人 主题发起人 dreamones
  • 开始时间 开始时间
D

dreamones

Unregistered / Unconfirmed
GUEST, unregistred user!
想实现这么一个功能,能像UlTracEdit那样可以将文件以十六进制的方式显示出来.
要求:不想用到第三方控件.最好有完整源代码.小弟比较菜:)
 
想实现这么一个功能,能像UlTracEdit那样可以将文件以十六进制的方式显示出来.
要求:不想用到第三方控件.最好有完整源代码.小弟比较菜:)
 
function getfilebin(const AFileName: String): String;
var
FS: TFileStream;
Str: String;
FByte: Byte;
i: Integer;
begin
if FileExists(AFileName) then
begin
FS := TFileStream.Create(AFileName, fmOpenRead);
if FS.Size > 0 then
begin
FS.Position := 0;
for i := 0 to FS.Size do
begin
FS.Read(FByte, 1);
if length(IntToHex(FByte, 1))=1 then
Str := Str + '0' + IntToHex(FByte, 1) +' '
else
Str := Str + IntToHex(FByte, 1) +' ';
end;
end;
FS.Free;
end;
Result := Str;
end;
 
谢谢回复....
japhe你的代码虽然可以执行,但速度太慢了.....打开一个几M的文件都要N久.还有,我要的是像UlTraEdit那样:左边是文件地址,中间是十六进制码。右边是Ascii码。
如果分数不够,我还可以再加,各位大侠帮个忙!
 
1.ReadFile()
2.IntToHex()
3.只读需要的
4...........
 
刘麻子大哥,在离线包里就看到你了^_^.....久仰久仰!
我比较差,能不能麻烦你说得详细一点呢????
 
function StrtoHex(s: string): string;
var
l : integer;
begin
result := '';
for l := 1 to Length(s) do
result := result + IntToHex(ord(s[l]), 2);
end;
 
惭愧惭愧, 我的想法是, 根据用户的操作, 每次读出一/二屏的数据来显示, 用API操作的话, SetFilePointer()就可以指定下次读写位置, 这样的话, 需要的内存比较小, 您试试吧! ^^
 
delphi中有个例子ResXplor,看看吧,很简单的一个HexDump,速度也不错

uses HexDump;
{$R *.dfm}
var HexDump: THexDump;
procedure TForm1.Button1Click(Sender: TObject);
var ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
ms.LoadFromFile('c:/windows/notepad.exe');
ms.Position:=0;
HexDump := CreateHexDump(Panel1);
HexDump.Address :=ms.Memory;
HexDump.DataSize :=ms.Size;
HexDump.AddressColor:=clred;
HexDump.HexDataColor:=clblue;
end;
 
各位的方法我去试试,如果可行马上给分,先谢了!
 
请问luckymanman,你的单元HexDump哪来的,怎么我引用的时候提示
Fatal Error] Unit1.pas(7): File not found: 'HexDump.dcu'
我用的是Delphi7

刘麻子大哥,我依你的思路去做,可能我比较菜吧,还是搞不出来~_~!!!
麻烦你能不能帮忙写一段,谢谢啊~!!!

还有一个问题,我的Delphi好像有问题:在Delphi执行一个程序的时候,程序可以正常运行,但当关闭该程序的时候就会出错,弹出一个CPU窗口.应该不会是程序出现内存泄露,我新建一个工程,里面什么都不加,在程序退出的时候还是会弹出CPU窗口.但编译出来的可执行文件却可以运行(即编译出来的EXE文件),而且退出时也不会出错!
重装了几次DELPHI都解决不了问题,装了Delphi2005问题依旧.哪位朋友帮忙解决这个问题的,再加50分....谢谢啊!!
 
帮个忙啊,各位兄弟>.....
 
顶到有人回答为止!!!!!!
 
将DELPHI彻底删除干净,包括注册表信息及DELPHI安装目录,再重新安装一次应该可以。以我前试过的。
 
DelphiX/Domes/Resxplor
有(HexDump.pas)
 
回复SXYZ:我已经删除得够彻底了。连注册表都我搜索了一遍~~~

各位大虾们还有什么高见????快疯了~~~
回复tbytby,我先去看看,谢了!
 
回复tbytby,那个方法根本不行啊,慢得要死.....
 
给分吧,在delphi的安装目录下demo/resxplor/resxplor.dpr有你需要的例子。
 
分一定给,但那个例子显示出来的十六进制是不可编辑的啊!!!!!至少应该可以在上面复制粘贴吧.........
 
我把tbytby的那段代码改成这样
var HexDump: THexDump;
procedure TForm1.Button1Click(Sender: TObject);
var
HexViewMS:TMemoryStream;
begin
MS:=TMemoryStream.Create;
try
if OpenDialog1.Execute then

MS.LoadFromFile(OpenDialog1.FileName);
MS.Position:=0;
HexDump := CreateHexDump(Panel);
HexDump.Address :=MS.Memory;
HexDump.DataSize :=HMs.Size;
HexDump.AddressColor:=clred;
HexDump.HexDataColor:=clblue;

finally
HexViewMS.Free;
end;
end;

但好像只能打开文本文件和Exe格式文件......怎么回事?
 
后退
顶部