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


>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;
  tmpstr    : String;
  remainder : Byte;
  negatize  : Boolean;
  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 }
      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;

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:


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]