php - php按位并返回错误结果
问题描述
当我使用以下变量时,我对两个变量的 AND 位运算有问题,返回正确的结果,“lock”= 1,open = 0
$ACRel = "00000000000000000000010000000000";
// $STS = "11000000011100000000"; //788224 locked
$STS = "11000000001100000000"; //787200 open
echo (is_numeric($STS)&is_numeric($ACRel)); // return 1 or 0
我收到十进制的 $STS 变量,我使用 decbin() 函数进行转换:
$ACRel = "00000000000000000000010000000000";
// $sts = decbin(788224);
$sts = decbin(787200); // return 11000000001100000000
echo (is_numeric($sts)&is_numeric($ACRel));
现在我总是返回 1,echo 中的 decbin 返回相同的值,但是当我使用 var_dump 时,我有:
$sts = "11000000001100000000";
/home/vagrant/code/project/pro/calc.php:8:string '11000000001100000000' (length=26)
$sts = decbin(788224);
/home/vagrant/code/project/pro/calc.php:12:string '11000000001100000000' (length=20)
为什么长度不同,字符串看起来一样?也许这就是答案?但我不知道为什么。
解决方案
与您描述的问题相关,我在这里看到两个问题。
按位应用 AND
我看到的第一个问题是,对所描述的值变量应用按位与运算。
但这里的问题是,您在方法is_number的布尔输出上按位应用 AND。这意味着如果它们是正确的数字,您将始终得到 1。
这里的一个解决方案是,您应该在将字符串转换为 int: intval后应用。
非数值的 $STS 值
我在这里看到的第二个问题是在公开的第一个示例中,该变量的内容包含非数值:
$STS = "11000000001100000000"; //787200 open
有一些字符是不可见的,但如果你用 ASCII 工具检查器检查,你可以看到它:看看这里和这里并复制这个变量的值,你会看到它包含非数字:
11000000001100000000U+202C
因此,is_numeric方法返回 false,因为没有将此字符串识别为该非数字(不可见)值的数字。这就是为什么在第一个例子中你得到 0 的原因。
推荐阅读
- c - 不能将字符放入 C 中的字符数组中
- javascript - 在单击另一个按钮之前检查用户单击了哪个按钮
- java - 为什么抛出异常会尝试加载扩展 Exception 的类(尽管它没有执行)而不是常规类
- c# - 如何编辑从数据库填充的datagridview列?C# Windows 窗体
- r - Probit回归:分类变量的边际效应?
- java - 没有 Maven 的黄瓜
- asp.net-core - 无法更改环境变量
- android - 领域 Android javassist.NotFoundException: io.realm.com_example_realmtest_data_SomethingRealmProxyInterface
- excel - 用于切换子字符串的 Excel 查找和替换公式
- javascript - 如何在不使用扩展属性的情况下验证上传的图像是 html 中的 javascript 中的图像