PHP7中对十六进制字符串处理的问题详解
吾爱主题
阅读:255
2022-01-19 14:25:00
评论:0
本篇文章由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
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。