【PHP8.x】hexdec関数の使い方

hexdec関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

hexdec関数は、16進数で表現された数値を10進数の数値に変換する関数です。コンピュータの分野では、色指定(例: #RRGGBB)やメモリのアドレス、データの識別子など、様々な場面で16進数が利用されます。しかし、人間が直接計算したり、一般的な算術処理に用いる際には、普段使い慣れている10進数の方が扱いやすいことがよくあります。

この関数は、変換したい16進数の値を文字列として引数に受け取ります。そして、その16進数文字列に対応する10進数の整数値を結果として返します。例えば、「FF」という16進数文字列を渡すと「255」が、「A」を渡すと「10」が返されます。

変換対象の文字列に16進数として無効な文字が含まれている場合でも、hexdec関数は文字列の先頭から有効な16進数として認識できる部分だけを変換します。例えば、「123XYZ」を渡すと「123」だけが変換され、「291」という10進数が返されます。

PHP 8では、非常に大きな16進数値を扱う際に、その値がPHPの整数型の最大値(通常は64ビット環境で約9✕10^18)を超えることがあります。このような場合、hexdec関数は自動的に浮動小数点数(float型)として値を返すため、大きな数値を扱う際には浮動小数点数特有の精度誤差に注意が必要です。システム開発において、外部システムからの16進数データを正確に処理し、それを10進数として利用する場面で、この関数は重要な役割を果たします。

構文(syntax)

1<?php
2echo hexdec("A0");
3?>

引数(parameters)

string $hex_string

  • string $hex_string: 16進数形式の数値を表す文字列

戻り値(return)

int|float

16進数文字列を整数または浮動小数点数に変換した値を返します。

サンプルコード

PHP hexdec関数で16進数を10進数に変換する

1<?php
2
3/**
4 * 16進数文字列を10進数に変換するhexdec関数の使用例。
5 *
6 * この関数は、システムエンジニアを目指す初心者がhexdec関数の基本的な動作と、
7 * 戻り値の型(intまたはfloat)がどのように変化するかを理解するのに役立ちます。
8 */
9function demonstrateHexdecConversion(): void
10{
11    echo "--- hexdec関数の使用例 ---\n\n";
12
13    // 1. 基本的な16進数文字列 (A -> 10)
14    $hexString1 = 'A';
15    $decimal1 = hexdec($hexString1);
16    echo "1. 16進数 '{$hexString1}' は10進数で {$decimal1} です。型: " . gettype($decimal1) . "\n";
17
18    // 2. 複数の桁を持つ16進数文字列 (FF -> 255)
19    $hexString2 = 'FF';
20    $decimal2 = hexdec($hexString2);
21    echo "2. 16進数 '{$hexString2}' は10進数で {$decimal2} です。型: " . gettype($decimal2) . "\n";
22
23    // 3. 大文字と小文字は区別されないことを示す (abc -> 2748)
24    $hexString3 = 'abc';
25    $decimal3 = hexdec($hexString3);
26    echo "3. 16進数 '{$hexString3}' (小文字) は10進数で {$decimal3} です。型: " . gettype($decimal3) . "\n";
27
28    // 4. PHP_INT_MAX (システムが扱える最大の整数値) を超える場合の例
29    // この値はシステム(32ビットか64ビットか)に依存します。
30    // 一般的に、64ビット環境では '7FFFFFFFFFFFFFFF' (約9.22E18) はintで収まりますが、
31    // 'FFFFFFFFFFFFFFFF' (約1.84E19) はintの範囲を超えるためfloatになります。
32    $hexString4 = 'FFFFFFFFFFFFFFFF'; // 64ビットの最大符号なし整数を表す16進数
33    $decimal4 = hexdec($hexString4);
34    echo "4. 16進数 '{$hexString4}' は10進数で {$decimal4} です。型: " . gettype($decimal4) . "\n";
35    echo "   (PHP_INT_MAXを超える場合、hexdec関数は戻り値をfloat型で返します。)\n";
36
37    echo "\n--- 変換完了 ---\n";
38}
39
40// 関数を実行して、結果を表示します。
41demonstrateHexdecConversion();

PHPのhexdec関数は、16進数形式の文字列を10進数の数値に変換するために使用される便利な関数です。引数$hex_stringには、変換したい16進数の文字列を指定します。例えば、'A'(10)や'FF'(255)のような値を渡すことができます。この関数は、16進数の大文字と小文字を区別せず、'A''a'も同じ値として扱います。

戻り値は通常、整数型を示すintですが、PHPがシステム上で扱える最大の整数値(PHP_INT_MAX)を超えるような非常に大きな16進数を変換しようとした場合、結果は浮動小数点数型を示すfloatとして返されます。これは、正確な数値を失わずに大きな値を表現するためです。

サンプルコードでは、まず基本的な16進数文字列を10進数に変換する例を示し、次に複数桁の16進数や小文字の16進数も正しく変換されることを確認しています。特に、'FFFFFFFFFFFFFFFF'のように極めて大きな16進数を変換する例を通じて、PHP_INT_MAXを超える場合に、戻り値の型がfloatに変わる挙動を具体的に示しています。これにより、hexdec関数の基本的な使い方から、戻り値の型が変化する条件までを理解できます。

hexdec関数は16進数文字列を10進数に変換します。引数には有効な16進数文字列を指定し、大文字と小文字は区別されません。変換処理は文字列の最初の無効な文字で停止するため、意図しない部分が変換されないよう注意が必要です。最も重要な点は、変換結果がPHPが扱える最大の整数値(PHP_INT_MAX)を超えた場合、戻り値のデータ型が自動的にint(整数)からfloat(浮動小数点数)に変わる点です。この場合、大きな数値を扱う際の浮動小数点数の精度について意識しておく必要があります。変換後の型を常に確認することで、予期せぬ数値の丸め誤差などの問題を回避し、安全にコードを利用できます。

関連コンテンツ