IntToStr and StrToInt are nice functions, but if you are dealing with other number systems then binarie, decimal or sedecimal you have to do this by yourself. Here is a solution for this.

The following two functions convert numbers to strings and back again. The number can be converted to any numeric base between 2 and 36. 2 because thats the minimum base (binary) and 36 because otherwise we´re out of numbers - 0..9 and A..Z used for representing numbers.

This one converts a number to its string representation:

const MinBase = 2;
      MaxBase = 36; 

function NumToStr (num, len, base: Integer;
neg: Boolean; fill: char): string; // num = the number to convert // len = minimum length of the resulting string // base = numeric base // 2 = bin, 8 = octal, 10 = dec, 16 = hex // neg = if true num is treated as negativ // fill = character that ist used as fill in // to get a string of the ‘length’ len // // Example: // NumToStr (45, 8, 2, false, ‘0′) > ‘00101101′ // NumToStr (45, 4, 8, false, ‘0′) > ‘0055′ // NumToStr (45, 4, 10, false, ‘ ‘) > ‘ 45′ // NumToStr (45, 4, 16, false, ‘0′) > ‘002D’ // NumToStr (45, 0, 36, false, ‘ ‘) > ‘19′ // var s: string; digit: Integer; begin num:= ABS (num); if ((base >= MinBase) and (base <= MaxBase)) then begin s:= ''; repeat digit:= num mod base; if digit < 10 then Insert (CHR (digit + 48), s, 1) else Insert (CHR (digit + 55), s, 1); num:= num div base; until num = 0; if neg then Insert ('-', s, 1); while Length(s) < len do Insert (fill, s, 1); end; Result:= s; end;
This is the counterpart to the function above. It converts a string containing an number into its numerical value:
function StrToNum (const s: string; base: Integer;
                   neg: Boolean; max: Integer): Integer;
// s = the string containing the number
// base = numeric base that is expected
// neg = string can contain ‘-’ to show if < 0
// max = maximum number that can be contained
//
// Example:
// i:= StrToNum ('00101101', 2, false, MaxInt);
// i:= StrToNum ('002D', 16, false, MaxInt);
// i:= StrToNum ('-45', 10, true, MaxInt);
// i:= StrToNum ('ZZ', 36, true, MaxInt);
//
var negate, done: Boolean;
    i, ind, len, digit, mmb: Integer;
    c: Char;
    mdb, res: Integer;
begin
 res:= 0; i:= 1; digit:= 0;
 if (base >= MinBase) and
    (base <= MaxBase) then begin
  mmb:= max mod base;
  mdb:= max div base;
  len:= Length (s);
  negate:= False;
  while (i <= len) and (s[i] = '') do Inc (i);
  if neg then begin
   case s[i] of
    '+': Inc (i);
    '-': begin Inc (i); negate:= TRUE; end;
   end; (* CASE *)
  end; (* IF neg *)
  done:= len > i;
  while (i <= len) and done do begin
   c:= Upcase (s[i]);
   case c of
    '0'..'9': digit:= ORD(c) - 48;
    'A'..'Z': digit:= ORD(c) - 55;
    else done:= FALSE
   end; (* CASE *)
   done:= done and (digit < base);
   if done then begin
    done:= (res < mdb) or ((res = mdb) and
           (digit <= mmb));
    if done then begin
     res:= res * base + digit;
     Inc (i);
    end; (* IF done *)
   end; (* IF done *)
  end; (* WHILE *)
  if negate then res:= - res;
 end; (* IF done *)
 Result:= res;
end;