本篇文章由PHP7教程欄目給大家介紹一下關于 php7 中 "0xFFFFFFFF" 和 0xFFFFFFFF 的問題。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
具體問題:
1
2
3
|
$t1 = 0x3FFFFFFF & (1 * (0xd5b42e11)); $t2 = 0x3FFFFFFF & (1 * ( "0xd5b42e11" )); var_dump( $t1 , $t2 ); |
以上代碼在 php7(不含)以下平臺的值為:
1
2
|
int(364129809) int(364129809) |
而在 php7的值為:
1
2
|
int(364129809) int(0) |
請問,在 php7的環境下,應該如何處理 0x.$str 使它同上面值一樣呢?
解決辦法:
PHP7開始,含十六進制字符串不再被認為是數字
如果非要檢測字符串是否含十六進制數字,官方建議的代碼是
1
2
3
4
5
6
7
8
|
<?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) ?> |
針對上述問題就應該改成
1
2
3
|
$t1 = 0x3FFFFFFF & (1 * (0xd5b42e11)); $t2 = 0x3FFFFFFF & (1 * (filter_var( "0xd5b42e11" , FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX))); var_dump( $t1 , $t2 ); |
到此這篇關于PHP7中對十六進制字符串處理的問題詳解的文章就介紹到這了,更多相關PHP7中對十六進制字符串處理的問題內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.php.cn/topic/php7/484545.html