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).
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.
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.
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.
For converting numbers to decimal strings refer to the FNUSING library supplied with BBC BASIC for Windows and documented here.
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.