[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    { 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;

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]