In development, base conversion is a common requirement, especially when dealing with numerical systems, data encryption, or interacting with different encoding schemes. PHP offers several built-in functions to facilitate base conversions. Two frequently used functions are base_convert() and dechex(), which enable conversion between various bases. This article explores how to combine these two functions to simplify base conversion operations.
First, let's understand the basic functionalities of these two functions:
base_convert($number, $from_base, $to_base): Converts $number from base $from_base to base $to_base. It supports bases ranging from 2 to 36.
dechex($number): Converts a decimal number $number to its hexadecimal string representation.
base_convert() is a very flexible function that allows conversion between different bases. With this function, you can specify the starting base and the target base, handling conversions from binary, octal to hexadecimal and more.
For example, converting a binary number to decimal:
<span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-string">'1101'</span></span><span>;
</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$binary</span></span>, </span><span><span class="hljs-number">2</span></span>, </span><span><span class="hljs-number">10</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decimal</span></span><span>; </span><span><span class="hljs-comment">// Outputs 13</span></span><span>
</span></span>
You can also convert decimal to hexadecimal:
<span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-number">255</span></span><span>;
</span><span><span class="hljs-variable">$hex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$decimal</span></span>, </span><span><span class="hljs-number">10</span></span>, </span><span><span class="hljs-number">16</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hex</span></span><span>; </span><span><span class="hljs-comment">// Outputs ff</span></span><span>
</span></span>
dechex() is a function more focused on converting decimal to hexadecimal. It directly converts a decimal number to its hexadecimal representation. Compared to base_convert(), dechex() is more concise, especially when you only need to convert between decimal and hexadecimal.
For example, converting a decimal number to hexadecimal:
<span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-number">255</span></span><span>;
</span><span><span class="hljs-variable">$hex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dechex</span></span><span>(</span><span><span class="hljs-variable">$decimal</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hex</span></span><span>; </span><span><span class="hljs-comment">// Outputs ff</span></span><span>
</span></span>
In some cases, combining these two functions can efficiently complete base conversion, especially when converting directly from a certain base to hexadecimal. For example, to convert a binary number to hexadecimal, you can first convert binary to decimal, then decimal to hexadecimal:
<span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-string">'1101'</span></span><span>;
</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$binary</span></span>, </span><span><span class="hljs-number">2</span></span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// Convert binary to decimal first</span></span><span>
</span><span><span class="hljs-variable">$hex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dechex</span></span><span>(</span><span><span class="hljs-variable">$decimal</span></span><span>); </span><span><span class="hljs-comment">// Then convert decimal to hexadecimal</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hex</span></span><span>; </span><span><span class="hljs-comment">// Outputs d</span></span><span>
</span></span>
This example shows how to obtain a hexadecimal result from binary through a two-step process.
Suppose you need to convert a ternary (base 3) number to hexadecimal. You can first convert ternary to decimal, then decimal to hexadecimal:
<span><span><span class="hljs-variable">$ternary</span></span><span> = </span><span><span class="hljs-string">'10212'</span></span><span>; </span><span><span class="hljs-comment">// This is a ternary number</span></span><span>
</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$ternary</span></span>, </span><span><span class="hljs-number">3</span></span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// Convert ternary to decimal first</span></span><span>
</span><span><span class="hljs-variable">$hex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dechex</span></span><span>(</span><span><span class="hljs-variable">$decimal</span></span><span>); </span><span><span class="hljs-comment">// Then convert decimal to hexadecimal</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hex</span></span><span>; </span><span><span class="hljs-comment">// Outputs 94</span></span><span>
</span></span>
This process completes a complex base conversion through two calls to built-in functions.
By combining base_convert() and dechex(), we can flexibly perform conversions from any base to hexadecimal. base_convert() offers broad support for cross-base conversions, while dechex() provides a concise and efficient solution for decimal-to-hexadecimal conversion. The combination of these two functions enables efficient handling of various base conversion needs.
With this article, you can choose the appropriate function based on different scenarios and requirements to handle base conversion tasks, improving code simplicity and development efficiency.