I spent many frustrating days debugging a similar problem.  I
don't understand exactly what is going on, but it seems that the
problems revolve around PHP's treatment of an integer as signed
or unsigned.

Through experimentation I determined that the way you specify an
integer constant (decimal or hex) with the sign bit on will
affect how PHP treats that integer.

Try the following: determine the signed decimal equivalents of
the two hex integers in your code & replace the hex
representations with the decimal "equivalents".  So, if I'm
remembering correctly (please check my math), the line

        if ($a > hexdec("ffffffff"))

would become

        if ($a > -1)

See if this makes a difference.

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Saturday, July 06, 2002 5:54 PM
> To: [EMAIL PROTECTED]
> Subject: [PHP] Help needed with hexdec();
>
>
> Hi Guys,
>
> I have a problem wich I hope has been solved by someone :-)
>
> Here's the deal,
>
> I have to convert a perl script to PHP trying to do so
> I get negative
> values from hexdec(), If I use (int)hexdec() the
> numbers aren't negative
> anymore, but they do not add up to what they should.
>
> Here's the perl line:
> $a = FF ($a, $b, $c, $d, $temparr[8],  $S11, hex("698098d8"));
>
>
> this is PHP:
> $a = FF ($a, $b, $c, $d, $temparr[8],  $S11,
> hexdec("698098d8"));
>
> FF is a function:
> function FF($a,$b,$c,$d,$x,$s,$ac)
> {
>          $a += F($b,$c,$d) + $x + $ac;
>          if ($a > hexdec("ffffffff"))
>                    {
>                    $a = substr($a,strlen($a)-9,9) ;
>                    }
>          $a = RL($a,$s);
>          $a += $b;
>          return $a;
> }
>
> F is also a function:
> function F($x, $y, $z)
> {
>          return ((($x) & ($y)) | ((~$x) & ($z)));
> }
>
> Could anybody tell me what I am missing here?
>
> e-mail:  <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]
>
>


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to