Table of Contents

Number Conversion in BASIC

by Jonathan Harston and Richard Russell, December 2007

The following short functions perform conversion of unsigned 32-bit integers to fixed-length strings, in hexadecimal (base 16), octal (base 8) and binary (base 2).

Hexadecimal Output

  REM Hexadecimal padded with zeros
  DEF FNh0(A%,N%):LOCAL A$
  REPEAT A$=STR$~(A% AND 15)+A$:A%=A% >>> 4:UNTIL A%=0:=RIGHT$(STRING$(N%,"0")+A$,N%)
  :
  REM Hexadecimal padded with spaces
  DEF FNh(A%,N%):LOCAL A$
  REPEAT A$=STR$~(A% AND 15)+A$:A%=A% >>> 4:UNTIL A%=0:=RIGHT$(STRING$(N%," ")+A$,N%)

FNh0() converts the supplied number to a fixed width hexadecimal string padded with zeros, FNh() converts the supplied number to a fixed width hexadecimal string padded with spaces. For example, FNh0(10,6) returns 00000A.

Octal Output

  REM Octal padded with zeros
  DEF FNo0(A%,N%):LOCAL A$
  REPEAT A$=STR$(A% AND 7)+A$:A%=A% >>> 3:UNTIL A%=0:=RIGHT$(STRING$(N%,"0")+A$,N%)
  :
  REM Octal padded with spaces
  DEF FNo(A%,N%):LOCAL A$
  REPEAT A$=STR$(A% AND 7)+A$:A%=A% >>> 3:UNTIL A%=0:=RIGHT$(STRING$(N%," ")+A$,N%)

FNo0() converts the supplied number to a fixed width octal string padded with zeros, FNo() converts the supplied number to a fixed width octal string padded with spaces. For example, FNo0(10,6) returns 000012.

Binary Output

  REM Binary padded with zeros
  DEF FNb0(A%,N%):LOCAL A$
  REPEAT A$=STR$(A% AND 1)+A$:A%=A% >>> 1:UNTIL A%=0:=RIGHT$(STRING$(N%,"0")+A$,N%)
  :
  REM Binary padded with spaces
  DEF FNb(A%,N%):LOCAL A$
  REPEAT A$=STR$(A% AND 1)+A$:A%=A% >>> 1:UNTIL A%=0:=RIGHT$(STRING$(N%," ")+A$,N%)

FNb0() converts the supplied number to a fixed width binary string padded with zeros, FNb() converts the supplied number to a fixed width binary string padded with spaces. For example, FNb0(10,6) returns 001010.

Decimal Output

For converting numbers to decimal strings refer to the FNUSING library supplied with BBC BASIC for Windows and documented here.

Note

These functions are deliberately written in the same style to show their similarities. Fixed-length hexadecimal and fixed-length decimal can be performed with the following shorter functions.

  DEF FNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%) :REM Hex padded with zeros
  DEF FNh(A%,N%)=RIGHT$("       "+STR$~A%,N%)  :REM Hex padded with spaces
  DEF FNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%) :REM Decimal padded with zeros
  DEF FNd(A%,N%)=RIGHT$("         "+STR$A%,N%) :REM Decimal padded with spaces

Additionally, these functions are tailored for BBC BASIC for Windows (and BASIC V on other platforms). They will not work on other versions of BBC BASIC. If you need code to work on other versions of BBC BASIC or need code that is version/platform neutral, see other appropriate references, such as the BBC Micro Wiki.