Генерация одинакового результата с помощью bindec в разных системах

#php #binary #decimal

#php #двоичный #десятичный

Вопрос:

Мне любопытно, возможно ли генерировать одинаковые результаты с помощью метода bindec в php в разных системах.

Дело в том, что моя функция (которая использует метод bindec) отлично работает, когда я тестирую на своей 64-разрядной машине с Windows 7, но когда я переношу код на свой веб-сервер (под управлением Linux), я получаю разные результаты. Я сузил свою проблему до метода bindec, поэтому я знаю, что это вызывает проблему.

Спасибо, Роб

Вот функция. Мне нужен был оператор XOR, но он генерировал другой результат на моей машине и на моем сервере, поэтому я написал свой собственный, чтобы посмотреть, сработает ли это.

 function MyXOR($input, $key){
    $bin_data = decbin($input);
    $bin_key = decbin($key);
    $result_string = "";
    $len_data = strlen($bin_data);
    $len_key = strlen($bin_key);
    for($i = 0; $i < $len_data; $i  ){
        if($bin_data{$i} == $bin_key{$i % $len_key}){
                $result_string .= 0;
            } else {
                $result_string .= 1;
        }
    }

    return bindec($result_string);
}
  

Комментарии:

1. Пожалуйста, не могли бы вы опубликовать код функции? Нет причин bindec() давать разные результаты в разных операционных системах, это просто форма математической функции, а математика везде одинакова… Единственная причина, по которой вы могли бы получить другой результат, заключается в том, что одна из систем использует PHP <4.1.0, и вы передаете очень большое количество.

2. На самом деле, bindec() может работать по-разному на 32-разрядных машинах при преобразовании значений, превышающих 32 бита, потому что PHP преобразует их значение в float .

3. является ли веб-сервер 32-битной системой? в этом случае вы можете получить разные результаты, если целое число слишком велико, чтобы соответствовать целочисленному типу. см php.net/manual/en/function.bindec.php => Список Изменений

4. @Kaivosukeltaja 1 за хорошее замечание, хотя это не должно иметь практического значения в 99,9% случаев — В OP не указано, в чем разница между его результатами, поэтому трудно понять, в чем проблема и повлияет ли это на что-либо…

5. Я опубликовал свою функцию, и я считаю, что мой сервер 32-разрядный.