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

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

作成日: 更新日:

基本的な使い方

bindec関数は、二進数形式の文字列を、それに対応する十進数の値に変換するPHPの標準関数です。この関数は、引数として「0」と「1」のみで構成された二進数表記の文字列を受け取り、その文字列が表す数値を十進数の整数(int)または浮動小数点数(float)として返します。

例えば、「1101」という二進数文字列をbindec()に渡すと、十進数の「13」が返されます。引数に無効な文字が含まれている場合、PHP 8以降では、最初の無効な文字までの有効な部分が二進数として解釈されます。しかし、予期せぬ結果を防ぐため、常に「0」と「1」のみを含む厳密な二進数文字列を渡すことを推奨します。

変換される二進数の値が非常に大きく、PHPの整数の最大値(通常は64ビット環境で9,223,372,036,854,775,807)を超過する場合、結果は浮動小数点数(float)として返されます。これは、より大きな数値を正確に表現するためです。

bindec()関数は、データ形式の変換や、低レベルのビット操作、特定のプロトコル解析など、二進数データを扱うさまざまな場面で利用されます。異なる基数の数値を相互に変換する必要があるシステム開発において、非常に有用なツールとなります。

構文(syntax)

1<?php
2echo bindec('1101');

引数(parameters)

string $binary_string

  • string $binary_string: 2進数形式の文字列

戻り値(return)

int|float

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

サンプルコード

PHP bindec 関数で2進数を10進数に変換する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * bindec() 関数の使用例
7 * 
8 * この関数は、2進数表現の文字列を10進数の整数または浮動小数点数に変換します。
9 */
10function convertBinaryToDecimal(): void
11{
12    // --- 基本的な例 ---
13    // 2進数文字列 '1010' を準備します。
14    $binaryString1 = '1010';
15    // bindec() を使って10進数に変換します。
16    $decimalNumber1 = bindec($binaryString1);
17
18    // 結果を出力します。
19    echo "2進数 '{$binaryString1}' は10進数では: " . $decimalNumber1 . PHP_EOL; // 出力: 10
20
21    // --- 別の例 ---
22    // 2進数文字列 '1100100' を準備します。
23    $binaryString2 = '1100100';
24    // bindec() を使って10進数に変換します。
25    $decimalNumber2 = bindec($binaryString2);
26
27    // 結果を出力します。
28    echo "2進数 '{$binaryString2}' は10進数では: " . $decimalNumber2 . PHP_EOL; // 出力: 100
29
30    // --- 大きな数値を扱う例 ---
31    // PHPの整数で扱える最大値を超える可能性がある大きな2進数文字列。
32    // このような場合、戻り値は float 型になります。
33    // (64ビット環境の場合)
34    $largeBinaryString = '111111111111111111111111111111111111111111111111111111111111111'; // 63桁の'1'
35    $floatNumber = bindec($largeBinaryString);
36
37    // var_dump() を使うと、値と型を確認できます。
38    echo "大きな2進数を変換すると: ";
39    var_dump($floatNumber); // 出力: float(9.2233720368548E+18)
40}
41
42// 関数を実行してサンプルコードの出力を表示します。
43convertBinaryToDecimal();
44
45?>

PHPのbindec()関数は、2進数を表す文字列を、私たちが普段使う10進数の数値に変換するための関数です。

この関数は引数として、'0'と'1'のみで構成された2進数表現の文字列を受け取ります。例えば、サンプルコードの'1010''1100100'のような文字列がこれに該当します。

bindec()関数は、引数で渡された2進数文字列を計算し、その結果を10進数の数値として返します。サンプルコードでは、2進数の'1010'が10進数の10に変換されています。

戻り値の型は、通常は整数(int)型です。しかし、変換する2進数が非常に大きく、PHPが扱える整数の最大値を超えるような場合には、結果は自動的に浮動小数点数(float)型になります。これにより、非常に大きな数値を扱う際にも桁落ちを防ぐことができます。サンプルコードの3番目の例で、長い2進数文字列を変換した結果がfloat型で表示されているのはこのためです。

このようにbindec()関数を使えば、コンピュータで扱われる2進数のデータを、人間にとって分かりやすい10進数の数値へ簡単に変換できます。

bindec関数を使用する際は、引数に必ず2進数表現の文字列を指定してください。数値を直接渡すと意図通りに動作しない場合があります。引数の文字列に'0'と'1'以外の文字が含まれていると、その文字以降は無視されてしまうため、入力値が正しい形式か事前に確認することが重要です。また、変換後の数値が非常に大きい場合、システムの整数で扱える最大値を超えると、戻り値が整数(int)ではなく浮動小数点数(float)に変わります。float型は非常に大きな数値を扱えますが、計算の過程で精度が失われる可能性がある点に注意が必要です。

関連コンテンツ

【PHP8.x】bindec関数の使い方 | いっしー@Webエンジニア