//2进制转换16进制,根据每位,是1,就加相应值 ,空间复杂度低
function BinToHex(str
char):string;//call hextobin(pchar('111000111'))
var i,len,d,p,t:integer;
begin
len := high(str) - low(str);
d:= 1;
t :=0;
for i:= high(str) to low(str)+ 1do
begin
p := len - i;
if ord(str[p])=#48 then
begin
shl(d,p);//每一位为1就乘2
t := t + d;
end;
end;
t := t + ord(str[len])-48;//最后一位 odr('0')=48
result := inttohex(t,2);//转换成为16进制
end;
//方法2,查表,2分一个2进制 串,时间复杂度低
function BinToHex(str:string):string;//call hextobin(pchar('111000111'))
var a:array[0..15] of integer;
i,t,len:integer;
begin
a[0] := 0;
a[1] := 1;
a[2] := 10;
a[3] := 11;
a[4] := 100;
a[5] := 101;
a[6] := 110;
a[7] := 111;
a[8] := 1000;
a[9] := 1001;
a[10] := 1010;
a[11] := 1011;
a[12] := 1100;
a[13] := 1101;
a[14] := 1110;
a[15] := 1111;
t := StrToInt(rightbstr(Str,4));
//右边4位
result := inttohex(A[t],1);//查表
len := length(str);
if len>=4 then
begin
t := t + strToInt(leftbstr(str,len-4));//左边 长度-4位
result := inttohex(a[t],1) + result;//查表
end;
end;