求一个二进制算法(基础问题)(50分)

  • 主题发起人 主题发起人 tonyliu
  • 开始时间 开始时间
T

tonyliu

Unregistered / Unconfirmed
GUEST, unregistred user!
好久没有跟0和1直接打交道了,今天碰到一个小问题也无法解决,郁闷。请各位富翁帮帮忙吧

二进制串 01000000连续递增64次,每次递增后都变成十六进制字符串


第一次递增1后结果为01000001,转换成十六进制字符串为41
第二次递增1后结果为01000010,转换成十六进制字符串为42
第三次递增1后结果为01000011,转换成十六进制字符串为43
......
第64次递增1后结果为01111111,转换成十六进制字符串为7F

用程序如何实现,在线等待ing...

首先在这里感谢参与者。
 
你的二进制为a=40
for i:=1 to 60 do
begin
a:=a+i;
end;
 
这个人的问题不是很明确; 估计这不是你的原始问题,
就Delphi而言, 你如何表达二进制串? 二进制串如何递增1?
就字符串转换而言: 很简单的, '01000010'类似的字符串转换成一个字节非常简单的;
 
//整形转二进制字符串
function IntToBcd(intnum:integer;bcdlen:integer):string;
//intnum代表要转换的整形数.bcdlen代表代表转换后二进制的位数.
begin
RESULT:='';
while INTNUM<>0 do
begin
RESULT:=inttostr(INTNUM mod 2)+RESULT;
INTNUM:=INTNUM div 2
end;
while length(RESULT)<BCDLEN do RESULT:='0'+RESULT;
end;

//二进制字符串转整形数
function BcdToInt(BcdSTR:STRING):Integer;
var I,I2,ADDNUM:INTEGER;
begin
result:=0;
FOR I:=1 TO LENGTH(bcdSTR) DO
BEGIN
IF (I=LENGTH(bcdSTR)) AND (bcdSTR[LENGTH(bcdSTR)]='1') THEN
BEGIN
RESULT:=RESULT+1;
BREAK;
END;
IF bcdSTR='1' THEN
BEGIN
ADDNUM:=1;
FOR I2:=i TO LENGTH(bcdSTR)-1 DO ADDNUM:=ADDNUM*2;
RESULT:=RESULT+ADDNUM;
END;
END;
END;

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
I,k:Integer;
begin
s:='01000000';
k:=BcdToInt(S);
for I:=1 to 64 do
begin
Inc(K);
memo1.Lines.Append(format('%2d %s %s',[I,
IntToBcd(k,8),
IntToHex(k,2)]));
end;
end;
 
BinToHex 不知道能不能解决你的问题~
 
很简单,先把二进制转换成10进制,然后加1,在把10进制转换成二进制
 
很简单,先把二进制转换成10进制,然后加1,在把10进制转换成十六进制
不要被什麼二进制,十六进制等欺騙..
如果只是每次加一...
那麼不論什麼进制都是+1..
只是在"进制"的"表現"方法不同阿!
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部