furmiga
asked on
STRTOHEX
Yo guys im stuck here
I need to convert a text to hex - not a big deal if you use inttohex(strtoint(text),2) ;
Now the problem:
how do I convert a text like :
my_text := 1234567890123;
showmessage(inttohex(strto int(my_tex t),2)); // this will raise an exception in strtoint(my_text) since the number is higher then 2147483647
Question: Is there a way to convert a string with up to 10 digits into hexadecimal ? how to do it ?
thx in adv
I need to convert a text to hex - not a big deal if you use inttohex(strtoint(text),2)
Now the problem:
how do I convert a text like :
my_text := 1234567890123;
showmessage(inttohex(strto
Question: Is there a way to convert a string with up to 10 digits into hexadecimal ? how to do it ?
thx in adv
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
here is an alternative I've just spent some time on implementing that takes an integer string as uinput no matter how many digits:
procedure bigdiv16(int:string; var d,m:string);
var n,i,k:integer;
begin
i:=1;
repeat
n:=strtoint(copy(int,1,i)) ;
inc(i);
until (n div 16>0) or (i>length(int));
if i>length(int) then
begin
d:='0';
m:=int;//=inttostr(n);
exit;
end;
d:='';
k:=1;
repeat
n:=strtoint(copy(int,1,i-1 +k-1));
if n div 16 > 9 then
begin
dec(i);
continue;
end;
d:=d+chr((n div 16)+48);
if (n<16) and (length(int)>i-1+k-1) then
begin
inc(i);
continue;
end;
delete(int,1,i-1+k-1);
int:=inttostr(n mod 16)+int;
k:=length(inttostr(n mod 16));
until length(int)=k;
m:=int;
end;
function strtohex(int:string):strin g;
var d,m:string;
begin
d:=int;
result:='';
repeat
bigdiv16(d,d,m);
result:=inttohex(strtoint( m),1)+resu lt;
until d='0';
end;
my initial algorithm was much simpler, but there were some bugs. and that is why I put in thos nasty inc/decs. it's 4:30 am here. I should go to sleep cause I make ugly code :D
peace
procedure bigdiv16(int:string; var d,m:string);
var n,i,k:integer;
begin
i:=1;
repeat
n:=strtoint(copy(int,1,i))
inc(i);
until (n div 16>0) or (i>length(int));
if i>length(int) then
begin
d:='0';
m:=int;//=inttostr(n);
exit;
end;
d:='';
k:=1;
repeat
n:=strtoint(copy(int,1,i-1
if n div 16 > 9 then
begin
dec(i);
continue;
end;
d:=d+chr((n div 16)+48);
if (n<16) and (length(int)>i-1+k-1) then
begin
inc(i);
continue;
end;
delete(int,1,i-1+k-1);
int:=inttostr(n mod 16)+int;
k:=length(inttostr(n mod 16));
until length(int)=k;
m:=int;
end;
function strtohex(int:string):strin
var d,m:string;
begin
d:=int;
result:='';
repeat
bigdiv16(d,d,m);
result:=inttohex(strtoint(
until d='0';
end;
my initial algorithm was much simpler, but there were some bugs. and that is why I put in thos nasty inc/decs. it's 4:30 am here. I should go to sleep cause I make ugly code :D
peace
"lo( )" gets the bottom byte, and "shr 8" moves my "big number" to the right 1 byte (8 bits), effectively dropping off the last byte I just grabbed
I append the hex values, and stick a $ at the start