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, decbin в echo возвращает одно и то же значение, но когда я использую 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)

Почему длина отличается, строки выглядят одинаково? может быть это ответ? но я не знаю почему.

1

Решение

В связи с проблемой, которую вы описываете, я вижу здесь две проблемы.

Применяя И побитовый

Первая проблема, которую я вижу, состоит в том, чтобы применить операцию AND для побитовых переменных к описанным переменным значениям.

Но проблема в том, что вы применяя битовое AND к логическому выходу метода is_number. Это означает, что вы всегда получите 1, если они правильные числа.

Решение здесь заключается в том, что вы должны применять после приведения строки как int: intval.

$ STS значение с не числовыми значениями

Вторая проблема, которую я вижу здесь, в первом примере — содержание этой переменной содержит не числовые значения:

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

Есть некоторые символы, которые не видны, но если вы проверите с помощью инспектора инструментов ASCII, вы можете увидеть его: посмотрите Вот а также Вот и скопировать значение этой переменной, вы увидите, что содержит не числовые числа:

11000000001100000000U+202C

Итак, метод is_numeric возвращает ложь, потому что не распознает эту строку как числовой для этого не числового (не видимого) значения. И это причина, почему в первом примере вы получаете 0.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector