PHP7中對十六進制字符串處理的問題詳解
本篇文章由PHP7教程欄目給大傢介紹一下關於 php7 中 “0xFFFFFFFF” 和 0xFFFFFFFF 的問題。有一定的參考價值,有需要的朋友可以參考一下,希望對大傢有所幫助。
具體問題:
$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開始,含十六進制字符串不再被認為是數字
如果非要檢測字符串是否含十六進制數字,官方建議的代碼是
<?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中對十六進制字符串處理的問題詳解的文章就介紹到這瞭,更多相關PHP7中對十六進制字符串處理的問題內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!