Hello.

I added that code and it works on our x86_64 bit Intel machine (just
tested with your test.php). What environment are you using? I haven't
tested the code on a 32bit machine and I believe that it will not work
there. I should have propably added a note to the wiki that it wont
work on 32bit environment.

 - Juho Mäkinen

On Wed, Jul 7, 2010 at 2:08 PM, john xie <shanfengg...@gmail.com> wrote:
>
>
> http://wiki.apache.org/cassandra/FAQ#a_long_is_exactly_8_bytes
>
>         /**
>          * Takes php integer and packs it to 64bit (8 bytes) long big endian
> binary representation.
>          * @param  $x integer
>          * @return string eight bytes long binary repersentation of the
> integer in big endian order.
>          */
>         public static function pack_longtype($x) {
>                 return pack('C8', ($x >> 56) & 0xff, ($x >> 48) & 0xff, ($x
>>> 40) & 0xff, ($x >> 32) & 0xff,
>                                 ($x >> 24) & 0xff, ($x >> 16) & 0xff, ($x >>
> 8) & 0xff, $x & 0xff);
>         }
>
>         /**
>          * Takes eight bytes long big endian binary representation of an
> integer and unpacks it to a php integer.
>          * @param  $x
>          * @return php integer
>          */
>         public static function unpack_longtype($x) {
>                 $a = unpack('C8', $x);
>                 return ($a[1] << 56) + ($a[2] << 48) + ($a[3] << 40) +
> ($a[4] << 32) + ($a[5] << 24) + ($a[6] << 16) + ($a[7] << 8) + $a[8];
>         }
>
> test.php:
>
>  $input=1;
>
>  $output=unpack_longtype(pack_longtype($input));
>
>   print "input=".$input." but output = ".$output."\n";
>
>  $input=2;
>
>  $output=unpack_longtype(pack_longtype($input));
>
>  print "input=".$input." but output = ".$output."\n";
>
>   $input=3;
>
>  $output=unpack_longtype(pack_longtype($input));
>
>  print "input=".$input." but output = ".$output."\n";
>
> but in log file:
>
> input=1 but output = 2
>
> input=2 but output = 4
>
> input=3 but output = 6
>
>
>

Reply via email to