bugfix> php > 投稿

次のような値が123の文字列があります。16進値( $string = '123'; )戻り値は313233です。 $hex = bin2hex($string); を使用して文字列に再度変換すると 、123を正しく返します。しかし、「比較」しようとすると、常に16進値のように両方が返されます。

私は1、2、3の両方の数字が16進表の一部であることを知っていますが、それぞれを区別する方法はありますか?私はすでにそれについて何かを検索していましたが、解決策はありませんでした。

この質問が貧弱であればごめんなさい。しかし、それは本当に助けになります。それに、私が持っているのは疑いです。

私のPHPコード:

hex2bin()

<?php $string = '123'; $hex = bin2hex($string); if(hex2bin($hex)){ echo 'hex'; }else{ echo 'not hex'; } ?>
回答 2 件
  • 私が理解している限り、あなたは ctype_xdigit() を探しています  関数。文字列内の個々の文字がすべて16進数の場合はtrue、そうでない場合はfalseを返します。

    パラメータとして文字列を渡すだけです:

    if (ctype_xdigit($hex_string)){
        echo 'hex';
    } else {
        echo 'not hex';
    }
    
    

    元のコードで行ったことは、2進数を16進数に変換してから、逆に変換することでした。 123 のように、期待した結果が得られなかったのは驚くことではありません  2進数ではありません。入力には、 0 以外の数字は使用できません。  および 1

  • まず、関数はあなたが思うように機能しません、すなわち、 if(hex2bin($hex))  そのように使用すると、一種のナンセンスです。 (常に「true」と評価される「123」を返します)

    次に、 ctype_xdigit の使用を検討します  あなたがしたいことをする

    <?php
    $string = '123';
    $hex = bin2hex($string);
    if(ctype_xdigit($hex)){
        echo 'is a hex value (was originally '+hex2bin($hex)+')';
    }else{
        echo 'not hex';
    }
    ?>
    
    

あなたの答え