次のような値が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 件
まず、関数はあなたが思うように機能しません、すなわち、
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'; } ?>
関連記事
- データフレームに含まれる可能性のある小さい文字列に基づいて、データフレームの文字列値をフィルタリングします
- データフレームで文字列を検索し、新しい値を新しい列に格納します
- Twigで文字列を配列値に置き換えます
- Juliaでmatchを使用して文字列から構造体に値を解析する
- VectorAssemblerは、元の整数の代わりに文字列値を作成します
- パンダ:replace + regexを使用して文字列列から数値を抽出します
- javascriptで大文字と小文字を区別しない文字列の配列の値を置き換えます
- 行を選択して値を並べ替え、結果を新しい文字列列として追加します
- 文字列値のあるフィールドのみを残す
- 16進数をバイナリ文字列に変換し、ガベージシンボルとして出力します
関連した質問
- 正規表現で正しくフィルタリングする方法
- PHPの正規表現preg_replaceコマンドの置換パターンに。 '\ 1'を含める方法
- php:変数に特定の文字があるかどうかを確認する
- ネガティブルックアラウンドで定義されたルートは、ネガティブアサーションにもかかわらずルートと一致します
- PHP-内部コンテンツを含む完全なDivクラスを取得するための再帰正規表現
- PHPで正規表現が機能しないのはなぜですか?
- 特別な条件でのみ文字列から数字を削除する正規表現ガイド
- PHP:pregは最後の行を除くすべての文を分割します
- @言及のユーザー名のスペースとリンクの小文字
- PHPでコンテンツの一部を文字列に保持しながら、角かっこを置き換えるにはどうすればよいですか?
私が理解している限り、あなたは
ctype_xdigit()
を探しています 関数。文字列内の個々の文字がすべて16進数の場合はtrue、そうでない場合はfalseを返します。パラメータとして文字列を渡すだけです:
元のコードで行ったことは、2進数を16進数に変換してから、逆に変換することでした。
123
のように、期待した結果が得られなかったのは驚くことではありません 2進数ではありません。入力には、0
以外の数字は使用できません。 および1
。