# BBC BASIC Programmers' Reference

### Sidebar

number_20conversion_20in_20basic

## 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).

```  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%)
:
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%)
:
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%)
:
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.