Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: некорректная работа crc32() почему?
 
 автор: .scu   (26.05.2009 в 20:15)   письмо автору
 
 

Из-за чего может некорректно работать ф-ция crc32()?
При нормальной работе, например,

crc32(8)

выдает -100641005
но на некоторых хостингах выдает: 4194326291

PHP на нерабочем варианте - 5.2.6, но и на некоторых рабочих хостингах стоит такая же версия php.

Какие у кого мысли есть по этому поводу?

  Ответить  
 
 автор: Trianon   (26.05.2009 в 21:07)   письмо автору
 
   для: .scu   (26.05.2009 в 20:15)
 

Функция работает корректно.
во всяком случае приведенный пример посчитан верно.
В пределах 32 бит эти результаты равны.
Очевидно, те версии php, что выдают положительное число, работают на 64-битных ОС.

  Ответить  
 
 автор: .scu   (27.05.2009 в 06:39)   письмо автору
 
   для: Trianon   (26.05.2009 в 21:07)
 

есть ли решение, как заставить ее корректно работать на 64-битных системах?

  Ответить  
 
 автор: Trianon   (27.05.2009 в 08:42)   письмо автору
 
   для: .scu   (27.05.2009 в 06:39)
 

В смысле - выводить отрицательные величины?
Как-то так:
$x = crc32($arg);
$l = 1<<31;
if($l > 0 && $x >= $l) $x ^= (1<<32);

  Ответить  
 
 автор: .scu   (27.05.2009 в 12:31)   письмо автору
 
   для: Trianon   (27.05.2009 в 08:42)
 

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

  Ответить  
 
 автор: Trianon   (27.05.2009 в 12:56)   письмо автору
 
   для: .scu   (27.05.2009 в 12:31)
 

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

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

<?php
  $c 
crc32(8);
  echo 
$csprintf("= %08Xh<br>"$c);
  
$c = -100641005;
  echo 
$csprintf("= %08Xh<br>"$c);
  
$c 4194326291;
  echo 
$csprintf("= %08Xh<br>"$c);
?>


-100641005= FA005713h
-100641005= FA005713h
4194326291= FA005713h

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования