php按位并返回false结果

问题描述 投票:1回答:1

当我使用下面的变量返回正确的结果时,我对两个变量的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,decbin中的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)

为什么长度不同,字符串看起来一样?也许这是答案?但我不知道为什么。

php bitwise-operators bitwise-and
1个回答
2
投票

与您描述的问题相关,我在这里看到两个问题。

应用AND按位

我看到的第一个问题是,对所描述的值变量应用按位AND的运算。

但问题是,你在方法is_number的布尔输出上应用AND按位。这意味着如果数字正确,您将始终获得1。

这里的解决方案是,在将字符串转换为int:intval之后应该应用。

$ STS值,不是数值

我在这里看到的第二个问题是暴露的第一个例子,这个变量的内容包含非数值:

$STS = "‭11000000001100000000‬";  //787200 open

有一些字符是不可见的,但如果您使用ASCII工具检查器进行检查,您可以看到它:看看herehere并复制此变量的值,您将看到包含非数字数字:

11000000001100000000U+202C

那么,方法is_numeric返回false,因为没有将此字符串识别为该非数字(不可见)值的数字。这就是为什么在第一个例子中你得到0的原因。

© www.soinside.com 2019 - 2024. All rights reserved.