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
code format="bb4w" 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%) code
 * 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
code format="bb4w" 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%) code
 * 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
code format="bb4w" 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%) code
 * 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. code format="bb4w" 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 code 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].