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

    {
    LOU DUCHEZ

    >does andbody know an easy way to convert a Byte value from it's Integer
    > notation to hex notatation?

    Well, thank you For this message.  It finally got me off my keister (sp?) to
    Write a "decimal-to-hex" converter -- a project I'd been meaning to do, but
    never got around to.  (Technically, since I was in a seated position, I
    remained on my keister the whole time, but you know what I mean).  Actually,
    the following is not just "decimal-to-hex" -- it's decimal-to-any-base-from-
    2-to-36-converter (because base 1 and below doesn't make sense, and after
    base 36 I run out of alphabet to represent "digits").  Here is NUBASE:
    }

    Function nubase(numin : LongInt; base, numplaces : Byte) : String;
    Var
      tmpstr    : String;
      remainder : Byte;
      negatize  : Boolean;
    begin
      negatize := (numin < 0);              { Record if it's a negative number }
      if negatize then
        numin := abs(numin);                { convert to positive For calcs }
      tmpstr[0] := Char(numplaces);         { set length of the output String }

      While numplaces > 0 do
      begin                                 { Loop: fills each space in String }
        remainder := numin mod base;        { get next "digit" (under new base) }
        if remainder > 9 then
          tmpstr[numplaces] := Char(remainder + 64 - 9)   { convert to letter }
         else
          tmpstr[numplaces] := Char(remainder + 48);      { use number as is }
        numin := numin div base;            { reduce dividend For next "pass" }
        numplaces := numplaces - 1;         { go to "next" position in String }
      end;                                  { end of loop }

      { The following: if we've run out of room on the String, or if it's a
        negative number and there's not enough space For the "minus" sign,
        convert the output String to all asterisks. }

      if (numin <> 0) or (negatize and (tmpstr[1] <> '0')) then
        For numplaces := 1 to Byte(tmpstr[0]) do
          tmpstr[numplaces] := '*';

      { add minus sign }

      if negatize and (tmpstr[1] = '0') then
        tmpstr[1] := '-';

      nubase := tmpstr;
    end;

    {
    Feed it the number to convert, the base to convert into, and the number of
    spaces you want For it.  Leading zeros will be provided.  Example: to
    convert 111 into hex (base 16)  and give 4 digits of answer, you could say:

    Writeln(nubase(111, 16, 4))

    and it'd Write out:

    006F

    This routine does handle negative numbers too.  if you don't give it enough
    "space" in the third parameter you pass, it'll return all asterisks.  For
    laughs, try converting the number 111 into base 10 and giving it 5 digits
    of answer.  You'll get:

    00111  (predictably enough)
    }

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