首頁 > 後端開發 > PHP7 > 主體

關於PHP7中對十六進位字串處理的問題

藏色散人
發布: 2023-02-18 09:02:01
轉載
1848 人瀏覽過

本篇文章由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中對十六進位字串處理的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板