#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-разрядный.