=====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 [[http://www.bbcbasic.co.uk/bbcwin/manual/bbcwing.html#using|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 [[http://beebwiki.jonripley.com|BBC Micro Wiki]].