現在の位置: ホーム> 最新記事一覧> base_convert()関数で負のバイナリ変換を処理する際の注意事項は何ですか?

base_convert()関数で負のバイナリ変換を処理する際の注意事項は何ですか?

gitbox 2025-08-15
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、記事の内容とは何の関係もありません,プレフィックスコードの例としてのみ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"実行を開始します PHP 脚本...\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * base_convert() 関数内の負のバイナリ変換を処理する場合,予防策は何ですか?
 *
 * base_convert() はい PHP 組み込み関数,異なる数字間で数値文字列を変換するために使用されます。
 * 它的函数签名はい:string base_convert(string $number, int $from_base, int $to_base)
 *
 * しかし、実際に使用しています,base_convert() 負の数の直接処理をサポートしていません。
 * 以下は、負の数と部分数を変換する際に注意を払うためのいくつかの重要なポイントを詳細に説明します。。
 */</span>

</span><span><span class="hljs-comment">// 1. base_convert() ネガティブ入力はサポートされていません</span></span><span>
</span><span><span class="hljs-comment">// base_convert() 受け取った $number 参数はい字符串形式的数字,且该数字只能はい非负整数。</span></span><span>
</span><span><span class="hljs-comment">// ネガティブサインのある文字列が渡された場合(のように "-15"),関数は、違法な性格として否定的な兆候を無視します,誤った結果を引き起こします。</span></span><span>

</span><span><span class="hljs-comment">// 例</span></span><span>
</span><span><span class="hljs-variable">$negativeNumber</span></span><span> = </span><span><span class="hljs-string">"-15"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$negativeNumber</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"結果を変換します(ネガティブなサインで入ります): <span class="hljs-subst">$result</span></span></span><span>\n"; 
</span><span><span class="hljs-comment">// 出力の結果は、否定的な兆候を無視します,変換に相当します“15”,并不はい期望的负数二进制表示。</span></span><span>

</span><span><span class="hljs-comment">// 2. 負の数に対処する一般的な方法</span></span><span>
</span><span><span class="hljs-comment">// なぜなら base_convert() 負の変換はサポートされていません,通常的做法はい先检测数字的正负号,</span></span><span>
</span><span><span class="hljs-comment">// 次に、絶対値はバイナリで変換されます,最後に、ネガティブサインを手動で追加します。</span></span><span>

</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">base_convert_negative</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$number</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$from_base</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$to_base</span></span><span>): </span><span><span class="hljs-title">string</span></span><span> {
    </span><span><span class="hljs-variable">$isNegative</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>;
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>) &gt; </span><span><span class="hljs-number">0</span></span><span> &amp;&amp; </span><span><span class="hljs-variable">$number</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] === </span><span><span class="hljs-string">'-'</span></span><span>) {
        </span><span><span class="hljs-variable">$isNegative</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>;
        </span><span><span class="hljs-variable">$number</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
    }
    </span><span><span class="hljs-variable">$converted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>, </span><span><span class="hljs-variable">$from_base</span></span><span>, </span><span><span class="hljs-variable">$to_base</span></span><span>);
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$isNegative</span></span><span> ? </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$converted</span></span><span> : </span><span><span class="hljs-variable">$converted</span></span><span>;
}

</span><span><span class="hljs-comment">// テスト</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">base_convert_negative</span></span><span>(</span><span><span class="hljs-string">"-15"</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;  </span><span><span class="hljs-comment">// 出力:-1111</span></span><span>

</span><span><span class="hljs-comment">// 3. バイナリ変換の範囲制限</span></span><span>
</span><span><span class="hljs-comment">// base_convert() 支持的进制范围はい 2 到着 36。</span></span><span>
</span><span><span class="hljs-comment">// のように果试图转换超出这个范围的进制,関数は空の文字列を返します。</span></span><span>
</span><span><span class="hljs-comment">// したがって、負の数を扱うとき,また、入ってくる部門が合法であることを確認する必要があります。</span></span><span>

</span><span><span class="hljs-comment">// 4. 負の数の部分的な発現</span></span><span>
</span><span><span class="hljs-comment">// いくつかのシナリオで,補体形式で負の数を表すことが望ましいかもしれません。</span></span><span>
</span><span><span class="hljs-comment">// しかし base_convert() 只はい简单转换数值,補完的または署名された変換のサポートはありません。</span></span><span>
</span><span><span class="hljs-comment">// のように果需要补码表示,ビット操作とフォーマットは、自分で処理する必要があります。</span></span><span>

</span><span><span class="hljs-comment">// 5. 要約します</span></span><span>
</span><span><span class="hljs-comment">// - base_convert() マイナス数の直接変換はサポートされていません。</span></span><span>
</span><span><span class="hljs-comment">// - 負の兆候は手動で分離する必要があります,絶対値を変換します,ネガティブサインを追加します。</span></span><span>
</span><span><span class="hljs-comment">// - システムがある必要があります 2 到着 36 間。</span></span><span>
</span><span><span class="hljs-comment">// - 補完コードまたはその他の否定的なバイナリ表現は、自分で実装する必要があります。</span></span><span>

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>