PHPでは、 bindec()関数はバイナリ文字列を10進数に変換するために使用され、バイナリデータを処理する際に非常に実用的なツールです。例えば:
<?php
echo bindec("1101"); // 出力 13
?>
bindec()と同じ名前のPythonに組み込み関数はありませんが、同じ関数を非常に簡単に実装できます。この記事では、PythonでPHPのBindec()関数をシミュレートする方法を詳細に説明するために、いくつかの例を使用します。
Pythonの組み込み関数int()は、任意の文字列を小数に変換でき、正しいカーディナリティを提供する必要があります。例えば:
binary_string = "1101"
decimal_number = int(binary_string, 2)
print(decimal_number) # 出力 13
このint(binary_string、2)は、bindec( "1101")と同じ効果を達成します。
PHPの使用方法に近づくには、 Bindecと呼ばれる関数をカプセル化できます。
def bindec(binary_string):
try:
return int(binary_string, 2)
except ValueError:
raise ValueError("入力された文字列は有効なバイナリ形式ではありません")
それを使用する方法は次のとおりです。
print(bindec("1010")) # 出力 10
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
違法な文字列が入るのを防ぐために、最初に文字列が純粋なバイナリ形式であることを確認できます。
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)
Webページでこれらのコードをテストするのを容易にするには、オンラインPython実行環境を使用できます。
上記のコードをWebページにコピーして実行するだけで、結果を得る必要があります。これは、デバッグに非常に便利です。
PythonにはBindec()関数が組み込まれていませんが、 int()関数と単純な論理処理を介して、この関数をPHPで完全にシミュレートし、さらに強力にすることもできます。
基本的な関数は、 int(binary、2)によって実現できます。
PHPの補数動作をシミュレートする場合は、 bindec_signed()を使用できます。
例外と妥当性の処理を追加すると、堅牢性が向上します。
このチュートリアルが、言語間開発においてBindec()の関連ロジックをうまく移行するのに役立つことを願っています。