【PHP8.x】dechex関数の使い方
dechex関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
dechex関数は、10進数(decimal)の整数値を16進数(hexadecimal)の文字列に変換する関数です。この関数は、PHPの標準的な機能として提供されており、ウェブ開発やシステムプログラミングにおいて、特定のデータを16進数形式で表現する必要がある場面で利用されます。例えば、ウェブページの色指定(HTMLやCSSでのカラーコード)、メモリアドレスの表現、バイナリデータのデバッグ表示など、数値の表現形式を変換する多様な用途で役立ちます。
この関数は、変換したい10進数の整数を唯一の引数として受け取ります。引数には整数値のみを指定でき、小数点以下の値や文字列などを指定することはできません。例えば、dechex(255)を実行すると、10進数の255が16進数のffという文字列に変換されて返されます。同様に、dechex(10)はaを、dechex(15)はfを返します。
戻り値は常に文字列型であるため、変換後の16進数値を数値として計算に利用したい場合は、別途適切な型変換を行う必要があります。PHP 8の環境では、負の整数値を引数として与えた場合、その値は符号なし整数として扱われ、結果として非常に大きな16進数文字列が返されることがあります。例えば、64ビット環境でdechex(-1)はffffffffffffffffという文字列を返します。したがって、意図しない結果を避けるために、引数には正の整数値を与えることを推奨します。
このようにdechex関数は、数値の表現形式を変換する基本的ながらも非常に便利な機能を提供し、データ操作や表示において柔軟な対応を可能にします。
構文(syntax)
1<?php 2echo dechex(10); 3?>
引数(parameters)
int $num
- int $num: 16進数に変換したい整数
戻り値(return)
string
整数を16進数文字列に変換した結果を文字列として返します。
サンプルコード
PHP dechexで10進数を2桁16進数に変換する
1<?php 2 3/** 4 * 10進数の整数を2桁の16進数文字列に変換します。 5 * 6 * 与えられた整数を16進数に変換し、結果が1桁の場合は左側を '0' で埋めて 7 * 常に2桁の文字列を返します。 8 * 主に0から255までの整数(例: バイト値)の表現に有用です。 9 * 10 * @param int $num 変換する10進数の整数(推奨範囲: 0〜255) 11 * @return string 2桁にフォーマットされた16進数文字列 12 */ 13function convertDecimalToTwoDigitHex(int $num): string 14{ 15 // dechex関数を使って10進数を16進数に変換します。 16 // 例: dechex(0) -> "0", dechex(15) -> "f", dechex(16) -> "10" 17 $hexString = dechex($num); 18 19 // str_pad関数を使って、16進数文字列が2桁になるように左側を '0' で埋めます。 20 // STR_PAD_LEFT は文字列の左側を埋めることを指定します。 21 // 例: "0" -> "00", "f" -> "0f", "10" -> "10" 22 return str_pad($hexString, 2, '0', STR_PAD_LEFT); 23} 24 25// --- サンプルコードの実行例 --- 26echo "10進数 0 を2桁の16進数に変換: " . convertDecimalToTwoDigitHex(0) . PHP_EOL; // 期待値: 00 27echo "10進数 10 を2桁の16進数に変換: " . convertDecimalToTwoDigitHex(10) . PHP_EOL; // 期待値: 0a 28echo "10進数 15 を2桁の16進数に変換: " . convertDecimalToTwoDigitHex(15) . PHP_EOL; // 期待値: 0f 29echo "10進数 16 を2桁の16進数に変換: " . convertDecimalToTwoDigitHex(16) . PHP_EOL; // 期待値: 10 30echo "10進数 255 を2桁の16進数に変換: " . convertDecimalToTwoDigitHex(255) . PHP_EOL; // 期待値: ff 31 32// 注意: この関数は「2桁」の16進数にフォーマットするため、256以上の数値は3桁以上になりますが、 33// 強制的に2桁にトリミングはしません。入力値の範囲に注意してください。 34?>
PHPのdechex関数は、10進数の整数を16進数の文字列に変換する機能を提供します。この関数は、引数に変換したい10進数の整数(int $num)を受け取り、その16進数表現を文字列(string)として返します。例えば、dechex(15)は"f"を、dechex(16)は"10"を返します。
提供されたサンプルコードのconvertDecimalToTwoDigitHex関数は、このdechex関数を応用し、さらに結果の16進数文字列を常に2桁にフォーマットするものです。具体的には、まずdechexで10進数を16進数に変換した後、str_pad関数を用いて、もし結果が1桁だった場合に左側を '0' で埋めて2桁にします。これにより、convertDecimalToTwoDigitHex(0)は"00"を、convertDecimalToTwoDigitHex(10)は"0a"を、convertDecimalToTwoDigitHex(15)は"0f"を、convertDecimalToTwoDigitHex(255)は"ff"を返します。これは、色コードやバイト値の表現など、特定の桁数で数値を表現したい場合に非常に便利です。引数には変換したい10進数の整数を与え、戻り値としては常に2桁にフォーマットされた16進数文字列が得られます。
dechex関数は、与えられた10進数の整数を16進数の文字列に変換します。この関数単体では、変換結果の桁数を指定したり、不足する桁を '0' で埋めたりする機能はありません。
サンプルコードは、特に1バイトの値を表現する際によく求められる「常に2桁の16進数」を得るために、dechexで変換した結果をstr_pad関数で左側から '0' を埋めることで、2桁に整形しています。
この関数を利用する際の注意点として、入力値が255を超える場合が挙げられます。dechexは256以上の数値も正しく16進数に変換しますが、その結果は3桁以上の文字列になります。サンプルコードはこれを2桁に強制的に切り詰める処理は含まれていませんので、意図する「2桁」の動作を得るためには、変換する数値が0から255の範囲であることを確認してご使用ください。
PHPで10進数を先行ゼロ付き16進数に変換する
1<?php 2 3/** 4 * 10進数を16進数に変換し、指定された最小桁数になるように先行ゼロで埋めます。 5 * 6 * @param int $decimal 変換する10進数値。 7 * @param int $minLength 結果の文字列の最小桁数。この桁数に満たない場合は先行ゼロで埋められます。 8 * @return string 指定された最小桁数で先行ゼロが埋められた16進数文字列。 9 */ 10function getDechexWithLeadingZeros(int $decimal, int $minLength): string 11{ 12 // 1. dechex() 関数で10進数を16進数文字列に変換します。 13 // 例: dechex(15) は "f" を返します。 14 $hexString = dechex($decimal); 15 16 // 2. sprintf() 関数を使って、結果の16進数文字列を 17 // 指定された最小桁数 ($minLength) に先行ゼロで埋めます。 18 // '%0' は先行ゼロで埋めることを意味し、 19 // 's' は文字列として扱うことを意味します。 20 // 例: sprintf('%02s', "f") は "0f" を返します。 21 // 例: sprintf('%04s', "ff") は "00ff" を返します。 22 return sprintf('%0' . $minLength . 's', $hexString); 23} 24 25// --- 使用例 --- 26 27// 10進数の15を2桁の16進数に変換(先行ゼロで埋める) 28$decimalValue1 = 15; // 16進数でF 29$result1 = getDechexWithLeadingZeros($decimalValue1, 2); 30echo "10進数: {$decimalValue1} -> 2桁16進数: {$result1}\n"; // 出力: 0f 31 32// 10進数の255を4桁の16進数に変換(先行ゼロで埋める) 33$decimalValue2 = 255; // 16進数でFF 34$result2 = getDechexWithLeadingZeros($decimalValue2, 4); 35echo "10進数: {$decimalValue2} -> 4桁16進数: {$result2}\n"; // 出力: 00ff 36 37// 10進数の256を4桁の16進数に変換 38$decimalValue3 = 256; // 16進数で100 39$result3 = getDechexWithLeadingZeros($decimalValue3, 4); 40echo "10進数: {$decimalValue3} -> 4桁16進数: {$result3}\n"; // 出力: 0100 41 42// 既に指定桁数以上の場合はそのまま(先行ゼロは追加されない) 43$decimalValue4 = 4096; // 16進数で1000 44$result4 = getDechexWithLeadingZeros($decimalValue4, 2); 45echo "10進数: {$decimalValue4} -> 2桁16進数: {$result4}\n"; // 出力: 1000 46 47?>
PHPのdechex関数は、整数型の10進数(int $num)を16進数の文字列(string)に変換する機能を提供します。例えば、10進数の15はdechex(15)で"f"という文字列に変換されます。
しかし、この関数だけでは、変換後の16進数が指定した桁数に満たない場合に、先頭に「0」を加えて桁数を揃える(先行ゼロ埋め)ことはできません。サンプルコードのgetDechexWithLeadingZeros関数は、この先行ゼロ埋めを行うためのものです。
この関数は、引数として変換したい10進数値(int $decimal)と、結果の文字列の最小桁数(int $minLength)を受け取ります。内部では、まずdechex関数で10進数を16進数文字列に変換します。次に、その結果をsprintf関数に渡し、指定された最小桁数になるように先行ゼロで埋めます。sprintf関数の書式指定子である%0は先行ゼロで埋めることを、sは文字列として扱うことを意味します。
戻り値は、指定された最小桁数で先行ゼロが埋められた16進数文字列です。例えば、10進数15を2桁で変換すると"0f"となり、255を4桁で変換すると"00ff"となります。元々指定桁数以上の場合は、先行ゼロは追加されずにそのまま出力されます。
PHPのdechex関数は、10進数を16進数に変換しますが、結果には先行ゼロは付与されません。特定の桁数で先行ゼロを埋めたい場合は、サンプルコードのようにsprintf関数と組み合わせて使用するのが一般的です。sprintf('%0Ns', $string)の0は先行ゼロ埋めを、Nは最小桁数を指定し、sは文字列として扱います。注意点として、指定した最小桁数よりも変換結果の16進数文字列の桁数が大きい場合、sprintfは桁数を切り詰めずにそのままの値を返します。関数で引数や戻り値に型ヒントが使われていることで、誤った型の値が渡されるのを防ぎ、プログラムの安全性が高まります。