给你两个函数,分别是2进制转10进制和10进制转2进制 象你说的文本是:0D 00 转成二进制是:0000 0000 0000 1101 可以用inttobin(strtoint('$'+'000d'),16) 根据二进制后五位转十进制为:13 可以用strtoint('$'+'000d')或者bintoint('0000000000001101') 然后再8位转十进制:0 这个没有看明白,呵呵function bintoint(s:string):integer; var j,i:integer; begin result:=0; if s='' then begin result:=-1; exit; end; for i:=length(s) downto 1 do begin j:=1; j:=j shl (length(s)-i); if s[i]='1' then result:=result or j else if s[i]='0' then result:= result and (not j) else begin result:=-1; exit; end; end; end;function inttobin(i:integer;size:integer):string; var j: integer; begin result:=''; for j:=size-1 downto 0 do begin if i and (1 shl j)<>0 then result:=result+'1' else result:=result+'0'; end; end;
var Left13,Right5:Integer; begin Left13:=Round(StrToInt('$'+'000D')/32);//得到左二进制13位值。 Right5:=StrToInt('$'+'000D') mod 32);//得到左二进制13位值。 ……
var Left13,Right5:Integer; begin Left13:=Round(StrToInt('$'+'000D')/32);//得到左13位二进制值。 Right5:=StrToInt('$'+'000D') mod 32);//得到右5位二进制值。 ……555555555555555,太懒Copy的结果,变成了两个都是“得到左二进制13位值。”了。:-(
“然后以10进制文本输出”那就再改:var strLeft13,strRight5:String; …… strLeft13:=IntToStr(Round(StrToInt('$'+'000D')/32)); //得到左13位二进制值。 strRight5:=IntToStr(StrToInt('$'+'000D') mod 32); //得到右5位二进制值。 );……
netwolfds(晓竹)你给的函数确实能实现,但是你能告诉我他的原理吗?
to brucely()'s 另外我想问一下那个“$”起得是什么作用阿? 作用是告诉Delphi 后面的是16进制数串。
上面的少了一个函数
ShowMessage(IntToStr(StrToInt('$'+'ABCDEF')));
象你说的文本是:0D 00
转成二进制是:0000 0000 0000 1101 可以用inttobin(strtoint('$'+'000d'),16)
根据二进制后五位转十进制为:13 可以用strtoint('$'+'000d')或者bintoint('0000000000001101')
然后再8位转十进制:0 这个没有看明白,呵呵function bintoint(s:string):integer;
var
j,i:integer;
begin
result:=0;
if s='' then
begin
result:=-1;
exit;
end;
for i:=length(s) downto 1 do
begin
j:=1;
j:=j shl (length(s)-i);
if s[i]='1' then
result:=result or j
else if s[i]='0' then
result:= result and (not j)
else
begin
result:=-1;
exit;
end;
end;
end;function inttobin(i:integer;size:integer):string;
var
j: integer;
begin
result:='';
for j:=size-1 downto 0 do
begin
if i and (1 shl j)<>0 then
result:=result+'1'
else
result:=result+'0';
end;
end;
文本是:0D 00
转成二进制是:0000 0000 0000 1101
是按照什么来的啊就是先把0D 00变成00 0D,然后就按顺序这样变成二进制阿
Left13,Right5:Integer;
begin
Left13:=Round(StrToInt('$'+'000D')/32);//得到左二进制13位值。
Right5:=StrToInt('$'+'000D') mod 32);//得到左二进制13位值。
……
Left13,Right5:Integer;
begin
Left13:=Round(StrToInt('$'+'000D')/32);//得到左13位二进制值。
Right5:=StrToInt('$'+'000D') mod 32);//得到右5位二进制值。
……555555555555555,太懒Copy的结果,变成了两个都是“得到左二进制13位值。”了。:-(
strLeft13,strRight5:String;
……
strLeft13:=IntToStr(Round(StrToInt('$'+'000D')/32)); //得到左13位二进制值。
strRight5:=IntToStr(StrToInt('$'+'000D') mod 32); //得到右5位二进制值。
);……