# Base Conversion In PHP Using Built-In Functions

Copyright © 2008-2014 Exploring Binary

http://www.exploringbinary.com/base-conversion-in-php-using-built-in-functions/

The PHP programming language has many built-in functions for converting numbers from one base to another. In fact, it has so many functions that it can be hard to know which to use. Some functions have similar capabilities, and some work with parameters of different types. We’ll sort through the differences in this article, and explain the proper context in which to use each function.

As a guide to our discussion, our mission will be to write programs that take, as input, an integer in a given base, and produce, as output, the equivalent of that integer in another base. Both the input and output will be ** strings** — sequences of characters with encodings like ASCII or EBCDIC. That is the form numbers take when read in from and written out to a user. Contrast this with numbers that can be operated on arithmetically inside a computer, numbers represented with binary integers or floating-point binary. I call numbers in that form

**.**

*numeric binary*Why the distinction between string and numeric binary? Because both types are used in PHP’s conversion functions. Knowing which parameters are which type is key to using the functions properly.

## Summary of PHP Conversion Functions

PHP has built-in functions that can convert, or help convert, integers between string representations in various number bases. We will use them to convert between decimal (base 10), binary (base 2), hexadecimal (base 16), and octal (base 8). These are number bases that anyone versed in binary should know.

There’s an important point I need to make before continuing. In PHP, and just about anywhere else, ** functions described as converting to or from decimal really convert to or from numeric binary!** If you take only one thing from this article, let that be it.

Here is a summary of the PHP conversion functions used in this article, with a description of how they’re used, and the maximum integer they can safely convert:

Function | Type of Conversion | Max Integer |
---|---|---|

bindec() | Binary string to numeric binary | 2^{53} |

hexdec() | Hex string to numeric binary | 2^{53} |

octdec() | Octal string to numeric binary | 2^{53} |

intval() | Base 2 to 36 string to numeric binary | 2^{31} – 1 |

sscanf() | Decimal, hex, or octal string to numeric binary | 2^{31} – 1 |

decbin() | Numeric binary to binary string | 2^{32} – 1 |

dechex() | Numeric binary to hex string | 2^{32} – 1 |

decoct() | Numeric binary to octal string | 2^{32} – 1 |

strval() | Numeric binary to decimal string | Between 2^{39} and 2^{40} |

sprintf() | Numeric binary to decimal, binary, hex, or octal string | 2^{53} |

base_convert() | Base 2 to 36 string to base 2 to 36 string | 2^{53} † |

(† In the base_convert() documentation, there is this warning: *“base_convert() may lose precision on large numbers due to properties related to the internal ‘double’ or ‘float’ type used.”* If that leaves you wanting, it did me too.)

## Conversion Code Examples

In the following sections, I give examples of conversions between specific base pairs. Look for the specific conversion in which you’re interested.

In the code, I use separate variables for the input string, the intermediate numeric binary value, and the output string. The separate string variables represent the I/O of a program, keeping the code independent of any particular I/O mechanism (HTML form I/O, echo, printf, etc.). The separate variables also make clearer which parameters are which type.

The examples which use intval and sscanf limit the maximum integer that can be converted — to 2^{31} – 1. This is the case, for example, in the code that converts from decimal to binary, even though decbin supports integers up to 2^{32} – 1. A similar thing happens when composing the `*dec’ and `dec*’ functions. For example, hexdec followed by decbin is limited to 2^{32} – 1 by decbin.

The code does not label input and output strings with their base (for example, with prefixes like 0b, 0x, or 0o). The base is implied with context.

## Converting Between Decimal and Binary

### Decimal to Binary

Here are three ways to convert a decimal string to a binary string using built-in functions:

- Use
**intval**to convert the decimal string to numeric binary, and then use**decbin**to convert the numeric binary value to a binary string:<?php $decString = "42"; $binNumeric =

**intval**($decString); $binString =**decbin**($binNumeric); // = "101010" ?> - Use
**sscanf**to convert the decimal string to numeric binary, and then use**sprintf**to convert the numeric binary value to a binary string:<?php $decString = "32";

**sscanf**($decString,"%**d**",&$binNumeric); $binString =**sprintf**("%**b**",$binNumeric); // = "100000" ?>.**Note: support of the %b format specifier is nonstandard** - Use
**base_convert**to convert the decimal string directly to a binary string:<?php $decString = "26"; $binString =

**base_convert**($decString,**10**,**2**); // = "11010" ?>

### Binary to Decimal

Here are three ways to convert a binary string to a decimal string using built-in functions:

- Use
**bindec**to convert the binary string to numeric binary, and then use**sprintf**to convert the numeric binary value to a decimal string:<?php $binString = "11011110"; $binNumeric =

**bindec**($binString); $decString =**sprintf**("%.0**f**",$binNumeric); // = "222" ?> - Use
**intval**to convert the binary string to numeric binary, and then use**strval**to convert the numeric binary value to a decimal string:<?php $binString = "10100"; $binNumeric =

**intval**($binString,**2**); $decString =**strval**($binNumeric); // = "20" ?> - Use
**base_convert**to convert the binary string directly to a decimal string:<?php $binString = "111000111001"; $decString =

**base_convert**($binString,**2**,**10**); // = "3641" ?>

## Converting Between Decimal and Hexadecimal

### Decimal to Hex

Here are three ways to convert a decimal string to a hexadecimal string using built-in functions:

- Use
**intval**to convert the decimal string to numeric binary, and then use**dechex**to convert the numeric binary value to a hexadecimal string:<?php $decString = "42"; $binNumeric =

**intval**($decString); $hexString =**dechex**($binNumeric); // = "2a" ?> - Use
**sscanf**to convert the decimal string to numeric binary, and then use**sprintf**to convert the numeric binary value to a hexadecimal string:<?php $decString = "112";

**sscanf**($decString,"%**d**",&$binNumeric); $hexString =**sprintf**("%**x**",$binNumeric); // = "70" ?> - Use
**base_convert**to convert the decimal string directly to a hexadecimal string:<?php $decString = "25"; $hexString =

**base_convert**($decString,**10**,**16**); // = "19" ?>

### Hex to Decimal

Here are four ways to convert a hexadecimal string to a decimal string using built-in functions:

- Use
**hexdec**to convert the hexadecimal string to numeric binary, and then use**sprintf**to convert the numeric binary value to a decimal string:<?php $hexString = "de"; $binNumeric =

**hexdec**($hexString); $decString =**sprintf**("%.0**f**",$binNumeric); // = "222" ?> - Use
**intval**to convert the hexadecimal string to numeric binary, and then use**strval**to convert the numeric binary value to a decimal string:<?php $hexString = "14"; $binNumeric =

**intval**($hexString,**16**); $decString =**strval**($binNumeric); // = "20" ?> - Use
**sscanf**to convert the hexadecimal string to numeric binary, and then use**strval**to convert the numeric binary value to a decimal string:<?php $hexString = "27";

**sscanf**($hexString,"%**x**",&$binNumeric); $decString =**strval**($binNumeric); // = "39" ?> - Use
**base_convert**to convert the hexadecimal string directly to a decimal string:<?php $hexString = "25"; $decString =

**base_convert**($hexString,**16**,**10**); // = "37" ?>

## Converting Between Decimal and Octal

### Decimal to Octal

Here are three ways to convert a decimal string to an octal string using built-in functions:

- Use
**intval**to convert the decimal string to numeric binary, and then use**decoct**to convert the numeric binary value to an octal string:<?php $decString = "42"; $binNumeric =

**intval**($decString); $octString =**decoct**($binNumeric); // = "52" ?> - Use
**sscanf**to convert the decimal string to numeric binary, and then use**sprintf**to convert the numeric binary value to an octal string:<?php $decString = "9";

**sscanf**($decString,"%**d**",&$binNumeric); $octString =**sprintf**("%**o**",$binNumeric); // = "11" ?> - Use
**base_convert**to convert the decimal string directly to an octal string:<?php $decString = "25"; $octString =

**base_convert**($decString,**10**,**8**); // = "31" ?>

### Octal to Decimal

Here are four ways to convert an octal string to a decimal string using built-in functions:

- Use
**octdec**to convert the octal string to numeric binary, and then use**sprintf**to convert the numeric binary value to a decimal string:<?php $octString = "77"; $binNumeric =

**octdec**($octString); $decString =**sprintf**("%.0**f**",$binNumeric); // = "63" ?> - Use
**intval**to convert the octal string to numeric binary, and then use**strval**to convert the numeric binary value to a decimal string:<?php $octString = "14"; $binNumeric =

**intval**($octString ,**8**); $decString =**strval**($binNumeric); // = "12" ?> - Use
**sscanf**to convert the octal string to numeric binary, and then use**strval**to convert the numeric binary value to a decimal string:<?php $octString = "14";

**sscanf**($octString ,"%**o**",&$binNumeric); $decString =**strval**($binNumeric); // = "12" ?> - Use
**base_convert**to convert the octal string directly to a decimal string:<?php $octString = "61"; $decString =

**base_convert**($octString,**8**,**10**); // = "49" ?>

## Converting Between Power of Two Bases

You can use the functions above to convert between bases 2, 8, and 16 without going through decimal strings. One approach is to use base_convert; another is to compose the `*dec’ and `dec*’ functions.

### Hex to Binary

Here are two ways to convert a hexadecimal string to a binary string using built-in functions:

- Use
**hexdec**to convert the hexadecimal string to numeric binary, and then use**decbin**to convert the numeric binary value to a binary string:<?php $hexString = "1f"; $binNumeric =

**hexdec**($hexString); $binString =**decbin**($binNumeric); // = "11111" ?> - Use
**base_convert**to convert the hexadecimal string directly to a binary string:<?php $hexString = "ff"; $binString =

**base_convert**($hexString,**16**,**2**); // = "11111111" ?>

### Binary to Hex

Here are two ways to convert a binary string to a hexadecimal string using built-in functions:

- Use
**bindec**to convert the binary string to numeric binary, and then use**dechex**to convert the numeric binary value to a hexadecimal string:<?php $binString = "10011"; $binNumeric =

**bindec**($binString); $hexString =**dechex**($binNumeric); // = "13" ?> - Use
**base_convert**to convert the binary string directly to a hexadecimal string:<?php $binString = "1111"; $hexString =

**base_convert**($binString,**2**,**16**); // = "f" ?>

### Octal to Binary

Here are two ways to convert an octal string to a binary string using built-in functions:

- Use
**octdec**to convert the octal string to numeric binary, and then use**decbin**to convert the numeric binary value to a binary string:<?php $octString = "77"; $binNumeric =

**octdec**($octString); $binString =**decbin**($binNumeric); // = "111111" ?> - Use
**base_convert**to convert the octal string directly to a binary string:<?php $octString = "71"; $binString =

**base_convert**($octString,**8**,**2**); // = "111001" ?>

### Binary to Octal

Here are two ways to convert a binary string to an octal string using built-in functions:

- Use
**bindec**to convert the binary string to numeric binary, and then use**decoct**to convert the numeric binary value to an octal string:<?php $binString = "1010"; $binNumeric =

**bindec**($binString); $octString =**decoct**($binNumeric); // = "12" ?> - Use
**base_convert**to convert the binary string directly to an octal string:<?php $binString = "11011"; $octString =

**base_convert**($binString,**2**,**8**); // = "33" ?>

### Octal to Hex

Here are two ways to convert an octal string to a hexadecimal string using built-in functions:

- Use
**octdec**to convert the octal string to numeric binary, and then use**dechex**to convert the numeric binary value to a hexadecimal string:<?php $octString = "77"; $binNumeric =

**octdec**($octString); $hexString =**dechex**($binNumeric); // = "3f" ?> - Use
**base_convert**to convert the octal string directly to a hexadecimal string:<?php $octString = "123"; $hexString =

**base_convert**($octString,**8**,**16**); // = "53" ?>

### Hex to Octal

Here are two ways to convert a hexadecimal string to an octal string using built-in functions:

- Use
**hexdec**to convert the hexadecimal string to numeric binary, and then use**decoct**to convert the numeric binary value to an octal string:<?php $hexString = "7d8"; $binNumeric =

**hexdec**($hexString); $octString =**decoct**($binNumeric); // = "3730" ?> - Use
**base_convert**to convert the hexadecimal string directly to an octal string:<?php $hexString = "f0"; $octString =

**base_convert**($hexString,**16**,**8**); // = "360" ?>

## Recommendation

For string to string conversion, which was our mission in this article, use base_convert(). It converts between strings directly, and up to the maximum integer PHP supports. (In case you were curious, the implementation of base_convert() uses an intermediate numeric binary value.)

For conversion only between string and numeric binary, use the other functions. For example, a variable assigned a decimal or hexadecimal constant (0x prefix) can be converted to a binary string using decbin.

## Leave a Comment

(To reduce spam, cookies must be enabled)