|
|
|
| Из-за чего может некорректно работать ф-ция crc32()?
При нормальной работе, например,
crc32(8)
выдает -100641005
но на некоторых хостингах выдает: 4194326291
PHP на нерабочем варианте - 5.2.6, но и на некоторых рабочих хостингах стоит такая же версия php.
Какие у кого мысли есть по этому поводу? | |
|
|
|
|
|
|
|
для: .scu
(26.05.2009 в 20:15)
| | Функция работает корректно.
во всяком случае приведенный пример посчитан верно.
В пределах 32 бит эти результаты равны.
Очевидно, те версии php, что выдают положительное число, работают на 64-битных ОС. | |
|
|
|
|
|
|
|
для: Trianon
(26.05.2009 в 21:07)
| | есть ли решение, как заставить ее корректно работать на 64-битных системах? | |
|
|
|
|
|
|
|
для: .scu
(27.05.2009 в 06:39)
| | В смысле - выводить отрицательные величины?
Как-то так:
$x = crc32($arg);
$l = 1<<31;
if($l > 0 && $x >= $l) $x ^= (1<<32);
|
| |
|
|
|
|
|
|
|
для: Trianon
(27.05.2009 в 08:42)
| | дело не в отрицательных величинах, а в верных величинах, а знак может быть как плюс, так и минус.. | |
|
|
|
|
|
|
|
для: .scu
(27.05.2009 в 12:31)
| | >дело не в отрицательных величинах, а в верных величинах, а знак может быть как плюс, так и минус..
так вот, если знак может быть как плюс, так и минус, то оба ответа верны.
<?php
$c = crc32(8);
echo $c. sprintf("= %08Xh<br>", $c);
$c = -100641005;
echo $c. sprintf("= %08Xh<br>", $c);
$c = 4194326291;
echo $c. sprintf("= %08Xh<br>", $c);
?>
|
-100641005= FA005713h
-100641005= FA005713h
4194326291= FA005713h
|
| |
|
|
|