この記事は、php7 の「0xFFFFFFFF」と 0xFFFFFFFF の問題を紹介する PHP7 チュートリアル コラムからのものです。一定の参考値があるので、困っている友達が参考になれば幸いです。
具体的な質問:
$t1 = 0x3FFFFFFF & (1 * (0xd5b42e11)); $t2 = 0x3FFFFFFF & (1 * ("0xd5b42e11")); var_dump($t1,$t2);
php7 (含まれていません) および次のプラットフォームでの上記のコードの値は次のとおりです:
int(364129809) int(364129809)
そしてその値php7 では:
int(364129809) int(0)
すみません、php7 環境で 0x.$str を上記の値と同じにするにはどうすればよいですか?
解決策:
PHP7 以降、16 進数を含む文字列は数値とみなされなくなりました。
文字列に 16 進数が含まれているかどうかを確認する必要がある場合は、公式に推奨されるコードは
<?php $str = "0xffff"; $int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); if (false === $int) { throw new Exception("Invalid integer!"); } var_dump($int); // int(65535) ?>
ですが、上記の問題を解決するには
$t1 = 0x3FFFFFFF & (1 * (0xd5b42e11)); $t2 = 0x3FFFFFFF & (1 * (filter_var("0xd5b42e11", FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX))); var_dump($t1,$t2);に変更する必要があります。
以上がPHP7における16進数文字列の処理についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。