php Побитовое И вернуть ложный результат - PullRequest
0 голосов
/ 09 сентября 2018

У меня проблема с побитовой операцией 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 Ответ

0 голосов
/ 09 сентября 2018

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

Применение И поразрядно

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

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

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

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

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

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

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

11000000001100000000U+202C

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

...