Categories

# Converting numbers between decimal, binary, octal, and hexadecimal

PHP provides the following functions that convert numbers between integer decimal and the commonly used number systems, binary, octal, and hexadecimal.

## Converting decimal to binary

Using `decbin()` function:

```<?php
\$dec = 5;
echo decbin(\$dec); # 101```

Using base_convert() to covert decimal to binary:

```<?php
\$dec = 5;
echo base_convert(\$dec, 10, 2);
#Prints: 101```

Using sprintf() function to convert decimal to binary, the `%b` argument is presented as a binary number:

```<?php
\$dec = 5;
\$bin = sprintf('%b', \$dec);
echo \$bin; # 101```

## Converting binary to decimal

Using `bindec()` function:

```<?php
\$bin = 101;
echo bindec(\$bin); # 5```

Using base_convert() to convert binary to decimal:

```<?php
\$bin = 101;
\$dec = base_convert(\$bin, 2, 10);
echo \$dec; # Prints: 5```

Using sprintf() function, the `%d` argument is presented as a decimal number:

```<?php
\$bin = 0b101;
\$dec = sprintf('%d', \$bin);
echo \$dec; # Prints: 5```

Note: You must prefix the binary number (101) with “`0b`” (0b101), or the `sprintf()` function treats it as a decimal number.

Using `dechex()` function:

```<?php
\$dec = 1000;
echo dechex(\$dec); # 3e8```

Using base_convert() function to convert decimal to hexadecimal:

```<?php
\$dec = 1000;
\$hex = base_convert(\$dec, 10, 16);
echo \$hex; # Prints: 3e8```

Using sprint() function, the argument `%x` is presented as a hexadecimal number.

```<?php
\$dec = 1000;
\$hex = sprintf('%x', \$dec);
echo \$hex; # Prints: 3e8```

Using `hexdec()` function:

```<?php
\$hex = '3e8';
echo hexdec(\$hex); # 1000```

Using base_convert() function to convert hexadecimal to decimal:

```<?php
\$hex = '3e8';
\$dec = base_convert (\$hex, 16, 10);
echo \$dec; # Prints: 1000```

Using sprintf() function, the argument `%d` presented as a decimal number:

```<?php
\$hex = 0x3e8;
\$dec = sprintf('%d', \$hex);
echo \$dec; # Prints: 1000```

Note: You must prefix the hexadecimal number (3e8) with “`0x`” (0x3e8), or the `sprintf()` function won’t translate it properly.

## Converting decimal to octal

Using `decoct()` function:

```<?php
\$dec = 1000;
echo decoct(\$dec); # 1750```

Using base_convert() function to convert decimal to octal:

```<?php
\$dec = 1000;
\$oct = base_convert(\$dec, 10, 8);
echo \$oct; # Prints: 1750```

Using sprint() function, the argument `%o` is presented as an octal number.

```<?php
\$dec = 1000;
\$oct = sprintf('%o', \$dec);
echo \$oct; # 1750```

## Converting octal to decimal

Using `octdec()` function:

```<?php
\$oct = 1750;
echo octdec(\$oct); # 1000```

Using base_convert() function to convert octal to decimal:

```<?php
\$oct = 1750;
\$dec = base_convert(\$oct, 8, 10);
echo \$dec; # Prints: 1000```

Using sprint() function, the argument `%d` is presented as a decimal number:

```<?php
\$oct = 01750;
\$dec = sprintf('%d', \$oct);
echo \$dec; # Prints: 1000```

Note: the octal number must be prefixed by 0 (zero) or 0o (as of PHP 8.1), the octal number 1750 can be declared as 01750 or 0o1750.

## The base_​convert() function

```<?php
//Syntax
base_convert(string \$num, int \$from_base, int \$to_base): string```

This function takes three parameters:

1. `\$num`: The number to convert.
2. `\$from_base`: The current base of the number
3. `\$to_base`: The base to convert number to

The `base_convert()` function works for all bases from 2 to 36:

```<?php
\$dec = 1000;
\$bin = base_convert(\$dec, 10, 2);
echo "Decimal \$dec to binary \$bin <br>";

\$hex = base_convert(\$bin, 2, 16);
echo "Binary \$bin to hexadecimal \$hex <br>";

\$oct = base_convert(\$hex, 16, 8);
echo "Hexadecimal \$hex to octel \$oct <br>";

\$dec = base_convert(\$oct, 8, 10);
echo "Octel \$oct to decimal \$dec <br>";

# The following output prints on the web browser
/* Decimal 1000 to binary 1111101000