``````{ Here is another set of routines to convert Decimal to Hex and vice versa}

CONST
HexString : array [0..15] of char = '0123456789ABCDEF';

FUNCTION Dec2Hex (Num : word) : string;
{ Returns decimal value as hex string }
VAR
Loop  : Byte;
S     : string [10];

BEGIN
S := '';                                 { empty string }
for Loop := 1 to 4 do begin              { do 4 chars }
S := HexString [Lo (Num) and \$F] + S;  { use 4 lowest bits }
Num := Num shr 4;                      { shift bits right 4 }
end;
Dec2Hex := '\$' + S;                      { return string }
END;

FUNCTION Hex2Dec (S : string) : longint;
{ returns hexadecimal string as decimal value }
VAR
Len   : byte absolute S;
Loop  : byte;
Li    : longint;
Num   : longint;

BEGIN
if S [1] = '\$' then delete (S, 1, 1);
if upcase (S [Len]) = 'H' then dec (S [0]);
Num := 0;
for Loop := 1 to Len do begin
Li := 0;
while
(HexString [Li] <> S [Loop])         { compare letter }
and
(Li < 16)
do
inc (Li);                            { inc counter }
if Li = 16 then begin
Num := -1;                           { -1 if invalid }
exit;
end;
Num := Num + Li shl ((Len - Loop) * 4);   { add to Num }
end;
Hex2Dec := Num;                          { return value }
END;

``````