PHPでは、 bindec()関数を使用して、バイナリ文字列を小数点に変換します。使用は非常に簡単に思えますが、多くの開発者は、一貫性のない変換結果や実際の運用の期待などの問題に遭遇します。この記事では、この問題の原因を例で詳細に分析し、解決策を提供します。
bindec()関数は、バイナリ形式で文字列パラメーターを受信し、対応する小数整数を返します。例えば:
<code> <?php $ binary = "1101"; //バイナリ文字列$ decimal = bindec($ binary); echo $ decimal; //出力:13?> </code>上記のコードでは、 1101バイナリに対応する小数は13で、関数は正しく戻ります。
bindec()は「0」と「1」のみを認識します。文字列にスペース、ニューライン、またはその他の文字が含まれている場合、結果は異常になります。
<code> <?php $ binary = "1010 11"; // Space Echo Bindec($ binary)を含める; //出力の結果は期待を満たしていませんか?> </code>解決策:入力文字列が「0」と「1」のみで構成され、通常または文字列でフィルタリングできることを確認してください。
Webページまたは他のソースからコピーされたバイナリ文字列には、Line Breaks \ nやCarriage Return \ rなどの目に見えない文字がある場合があります。
<code> <?php $ binary = "101011 \ n"; Echo Bindec(Trim($ binary)); //トリムを使用して、エラーを避けるために、ホワイトスパース文字の開始と終了の文字を削除しますか?> </code>Bindec()はPHP整数タイプを返し、最大整数は一部の環境で制限されています(32ビットまたは64ビット)。バイナリ数が非常に大きい場合、結果はオーバーフローまたは浮動小数点数に変換される可能性があり、その結果、不正確になります。
例えば:
<code> <?php $ binary = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111解決:
<code> <?php $ binary = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111着信パラメーターが文字列型であることを確認してください。数値タイプが渡されると、PHPが自動的に変換され、これにより先頭のゼロが失われる可能性があり、その結果、予想とは異なる結果が得られます。
<code> <?php $ binary = 0101; //バイナリ文字列echo bindec($ binary)ではなく、オクタル番号5; // resurect result?> </code>正しい書き込み:
<code> <?php $ binary = "0101"; // string form echo bindec($ binary); //出力5?> </code>Bindec()を使用する場合、入力が純粋なバイナリ文字列であり、追加の文字がないことを確認する必要があります。
非常に大きなバイナリ番号の場合、GMPまたはBCMATHライブラリを使用する必要があります。
パラメーターが文字列であることを確認して、自動番号変換によって引き起こされるエラーを回避します。
トリム()と正規式を使用して、入力文字列をクリーニングして、正しい形式を確認します。
これらの詳細を理解した後、「 bindec()を使用してバイナリ文字列を変換するときに結果が予想されていない問題を回避できます。