On Fri, 22 Mar 2002, Mike Eynon wrote:

> I have looked through the pack code in php-4.1.2.  There appear to be no
> other options other than what is documented on the php.net pack function
> page.  There appears to be no way of specifying endian-ness for floats or
> doubles using pack.  They are copied to the output stream using a simple
> memcpy.

        The solution was much simpler than I though. Reversing
        the output with strrev() seems to do the job:

        $double = pack("d",   $val);

        if ($bigendian) {
            $double = strrev($double);
        }   

        Now the value of $double is the same in big and smallendian
        machines. So I suppose strrev() is binary safe.

> I would need more details on what you are doing to be sure, but, is the
> format something you can worry about on the unpacking side? 

        I am writing a binary file (BIFF) whose specs state that the data
        needs to be written littleendian.

> The code in pack.c for the pack function is pretty dang simple.  It wouldn't
> take more than an hour or so to cut and paste a few sections of code to add
> the options you need.  Could be good to have in future versions of php.

        +1 for adding that to future versions. Don't talk C myself 
        though ;)

-- 
Mika Tuupola                      http://www.appelsiini.net/~tuupola/


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

Reply via email to