如果要做一个很大的十六进制数的循环 ( 积分: 50 )

  • 主题发起人 主题发起人 everybody
  • 开始时间 开始时间
E

everybody

Unregistered / Unconfirmed
GUEST, unregistred user!
比如是一个从0到某25位十六进制数的循环,每次递增1
如果转换成十进制来的话,delphi能处理的整型是64bit的,25位十六进制数大大超过了这个范围。
如果用数值对应的string递增来循环的话,计数时每递增到了F这个字符就继续按ASCII的值来变换
怎么办呢?请教大虾呀[:(!]
 
比如是一个从0到某25位十六进制数的循环,每次递增1
如果转换成十进制来的话,delphi能处理的整型是64bit的,25位十六进制数大大超过了这个范围。
如果用数值对应的string递增来循环的话,计数时每递增到了F这个字符就继续按ASCII的值来变换
怎么办呢?请教大虾呀[:(!]
 
用两个int64来处理?不过这么大应该属于科学计算的范围了,你找一些“数值计算”的资料吧。
 
不能换个方式循环,非得这样循环?????
 
代码如下

var
Form1: TForm1;
Maxbit: integer;
Num: array of char;

procedure TForm1.Button1Click(Sender: TObject)
//程序开始
var
i: integer;
begin
maxbit:=strtoint(MaskEdit1.Text);
setlength(num,maxbit);
for i:=0 to maxbit-1 do
begin
num:='0';
end;
Timer1.Enabled:=not Timer1.Enabled;
end;

procedure TForm1.DoUp
//进行进位
var
i,j :integer;
begin
for i:=maxbit-1 downto 0 do
begin
if (num=':') then
num:='A';
if (num='G') then
begin
num:='0';
num[i-1]:=char(ord(num[i-1])+1);
end;
end;
end;

function TForm1.IsEnd: boolean
//判断是否全为F
var
i:integer;
begin
result:=true;
for i := 0 to maxbit-1 do
begin
if (num<>'F') then
begin
Result:=False;
exit;
end;
end;
end;

procedure TForm1.ShowNum
//显示数字
var
i: integer;
s: string;
begin
s:='';
for i:=0 to maxbit-1 do
begin
s:=s+num;
end;
Label2.Caption:=s;
Label2.Repaint;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
num[maxbit-1]:=Char(ord(num[maxbit-1])+1);
DoUp;
ShowNum;
if IsEnd then
Timer1.Enabled:=false;
end;

 

Similar threads

回复
0
查看
864
不得闲
回复
0
查看
628
谦行
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部