请大虾们指教!(100分)

  • 主题发起人 主题发起人 zhaokun
  • 开始时间 开始时间
Z

zhaokun

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个十六进制编辑器,不知道十六进制编辑器在显示上如何做?
请您详细的说说原理。(数据是如何转为十六进制的?要注意什么?怎
样做速度才会很快?)
谢谢了!祝你好运!
 
老兄,你走了好久呀?呵呵。。。忙什么呢?
你在写十六进制编辑器?我不会的呀。呵呵。。。
 
有什么特殊的么?inttohex 就可以得到一个整数的十六进制,显示时十六进制就是
以字符串的形式表示的。(0,1,3……E)只要注意汉字的双字节问题就可以了。
 
inttohex之后是字符串吗?
 
好“冷”呀?你老兄是要做什么呀?
为什么贴完就走了?
 
转化好办,难点在于显示。若想省劲,用grid控件把。
不然就自己写一个。
 
type
THexConversion=class(TConversion)
public
function ConvertReadStream(Stream:TStream;Buffer:PChar;
BufSize:Integer):Integer;override;
end;
function THexConversion.ConvertReadStream(Stream:TStream;Buffer:PChar;Bufsize:Integer):Integer;
var
s:string;
buf:array[1..16] of char;
i,n:Integer;
begin
Result:=0;
if BufSize<=82 then Exit;
s:=Format(';%.5x ',[Stream.Position]);
n:=stream.read(buf,16);
if n=0 then Exit;
for i:=1 to n do
begin
AppendStr(s,IntToHex(ord(buf),2)+' ');
if i mod 4=0 then AppendStr(s,' ');
end;
AppendStr(s,StringOfChar(' ',62-length(s)));
for i:=1 to n do
begin
if (buf<#32)or(buf>#126) then
buf:='.';
appendstr(s,buf);
end;
appendstr(s,#13#10);
strPCopy(Buffer,s);
Result:=Length(s);
if Stream.Position and $FFFF=0 then
//MainForm.Progress(Stream.Position);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
rich.RegisterConversionFormat('bin',THexConversion);
rich.RegisterConversionFormat('exe',THexConversion);
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
var
fname:string;
begin
rich.Lines.clear;
application.ProcessMessages;
try
rich.lines.LoadFromFile('d:/rich.exe');
except on e:EFOpenError do
MessageDlg('Can''t open file!',mtError,[mbOk],0);
end;

end;

我看书上有这样一段代码,可是速度又太慢了。不知道如何才能让速度高些呢?
 
请大家帮我呀?谢谢了,如果分不够我可以再加的。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
824
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
D
回复
0
查看
604
DelphiTeacher的专栏
D
后退
顶部