PHP7中对十六进制字符串处理的问题详解

admin3年前PHP教程37

本篇文章由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中对十六进制字符串处理的问题内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:php/topic/php7/484545

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

PHP 修改SESSION的生存时间案例详解

需求背景:用户希望他登录之后,浏览器就帮他记住登录状态,这样他就不用每次进入的时候,都需要登录一次。session过期时间:如果我们没有设置session的生成时间,在配置文件中默认的生存时间是144...

德国服务器延迟高怎么解决

德国服务器延迟高怎么解决?如果您的计算机连接到德国服务器时遇到延迟高的问题,以下是一些解决问题的方法:更换服务器:如果您连接到的服务器受到过载或网络故障,可能会导致延迟增加。尝试更换其他可用的德国服务...

php没有文件被上传的实例分析及解决办法

1、修改php.ini,设置上传文件的大小。2、在httpd.conf中添加“php_value upload_max_filesize "300M"”。3...

如何在thinkphp中使用windows计划任务定时执行php文件

实现思路如下:通过win的“任务”功能来定时执行一个bat文件,bat文件会调用php.exe文件,php.exe可以传递参数指定执行哪个类和方法方法如下:一,thinkphp...

Docker 安装 PHP并与Nginx的部署实例讲解

安装 PHP 镜像查找 Docker Hub 上的 php 镜像:此外,我们还可以用 docker search php 命令来查看可用版本:这里我们拉取官方的镜像,标签为7.3.24-fpm-str...

如何使用Zephir轻松构建PHP扩展

简介比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接,再写 SQL 语句请求数据。然而,这都是些既琐碎又重复度相当高的工作,因此,所有开发者对插件的需求呼之欲出。现在,...