現在の位置: ホーム> 最新記事一覧> PythonでPHPのbindec()関数を再現する方法

PythonでPHPのbindec()関数を再現する方法

M66 2025-05-29

PHPでは、 bindec()関数はバイナリ文字列を10進数に変換するために使用され、バイナリデータを処理する際に非常に実用的なツールです。例えば:

 <?php
echo bindec("1101"); // 出力 13
?>

bindec()と同じ名前のPythonに組み込み関数はありませんが、同じ関数を非常に簡単に実装できます。この記事では、PythonでPHPのBindec()関数をシミュレートする方法を詳細に説明するために、いくつかの例を使用します。

1。基本的な実装方法

Pythonの組み込み関数int()は、任意の文字列を小数に変換でき、正しいカーディナリティを提供する必要があります。例えば:

 binary_string = "1101"
decimal_number = int(binary_string, 2)
print(decimal_number)  # 出力 13

このint(binary_string、2)は、bindec( "1101")と同じ効果を達成します。

2。関数としてカプセル化されています

PHPの使用方法に近づくには、 Bindecと呼ばれる関数をカプセル化できます。

 def bindec(binary_string):
    try:
        return int(binary_string, 2)
    except ValueError:
        raise ValueError("入力された文字列は有効なバイナリ形式ではありません")

それを使用する方法は次のとおりです。

 print(bindec("1010"))  # 出力 10

3.シンボルビットの取り扱いの高度な実装

PHPでは、 Bindec()はバイナリ文字列を補数フォームとして扱い、署名された小数点に変換します。例えば:

 echo bindec("11111111111111111111111111111111"); // 出力 -1

この場合、 bindec()は32ビット1すべてを-1 (署名された整数)として扱います。 Pythonで同様の効果を達成するには、シンボルビットを手動で判断する必要があります。

 def bindec_signed(binary_string):
    length = len(binary_string)
    value = int(binary_string, 2)
    if binary_string[0] == '1':
        # 署名を補完します
        value -= 1 << length
    return value

例:

 print(bindec_signed("11111111111111111111111111111111"))  # 出力 -1
print(bindec_signed("10000000000000000000000000000000"))  # 出力 -2147483648

4.入力の妥当性を判断する方法

違法な文字列が入るのを防ぐために、最初に文字列が純粋なバイナリ形式であることを確認できます。

 def is_valid_binary(s):
    return all(c in '01' for c in s)

組み合わせて使用​​:

 def bindec_safe(binary_string):
    if not is_valid_binary(binary_string):
        raise ValueError("違法なバイナリ文字列")
    return int(binary_string, 2)

5。オンラインテストツールの推奨

Webページでこれらのコードをテストするのを容易にするには、オンラインPython実行環境を使用できます。

上記のコードをWebページにコピーして実行するだけで、結果を得る必要があります。これは、デバッグに非常に便利です。

6。概要

PythonにはBindec()関数が組み込まれていませんが、 int()関数と単純な論理処理を介して、この関数をPHPで完全にシミュレートし、さらに強力にすることもできます。

  • 基本的な関数は、 int(binary、2)によって実現できます。

  • PHPの補数動作をシミュレートする場合は、 bindec_signed()を使用できます。

  • 例外と妥当性の処理を追加すると、堅牢性が向上します。

このチュートリアルが、言語間開発においてBindec()の関連ロジックをうまく移行するのに役立つことを願っています。