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

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

藏色散人
リリース: 2023-02-18 09:02:01
転載
1921 人が閲覧しました

この記事は、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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート