ホームページ  >  記事  >  バックエンド開発  >  PHP7における16進数文字列の処理について

PHP7における16進数文字列の処理について

藏色散人
藏色散人転載
2021-11-19 17:07:211848ブラウズ

この記事は、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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。