=====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]].