У меня проблема с побитовой операцией 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 в эхо возвращает то же значение, но когда я использую 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)
Почему длина разная, струны выглядят одинаково? может это ответ? но я не знаю почему.






В связи с проблемой, которую вы описываете, я вижу здесь две проблемы.
Первая проблема, которую я вижу, - это применить операцию побитового И к описанным переменным значения.
Но проблема здесь в том, что вы применение побитового И к логическому выводу метода is_number. Это означает, что вы всегда получите 1, если это правильные числа.
Решение здесь в том, что вы должны применить после преобразования строки как int: Intval.
Вторая проблема, которую я здесь вижу, связана с первым показанным примером, содержанием этой переменной содержит нечисловые значения:
$STS = "11000000001100000000"; //787200 open
Есть некоторые символы, которые не видны, но если вы проверите с помощью инспектора инструментов ASCII, вы можете увидеть это: посмотрите здесь и здесь и скопируйте значение этой переменной, вы увидите, что оно содержит нечисловые числа:
11000000001100000000U+202C
Итак, метод is_numeric возвращает false, потому что не распознает эту строку как числовую для этого нечислового (невидимого) значения. Вот почему в первом примере вы получаете 0.
decbin возвращает двоичную переменную, а $ sts = "" возвращает строковую переменную. Это два разных типа переменных, хотя var_dump возвращает строку