Re: Working with internal data formats
| From: | Robin Vickery | Date: | Thu, 15 May 2008 15:16:12 +0000 |
| Subject: | Re: Working with internal data formats | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-274380@lists.php.net to get a copy of this message | ||
On 15/05/2008, John Gunther <php@bucksvsbytes.com> wrote:
> Iv Ray wrote:
>
> > John Gunther wrote:
> > > What technique can I use to take an 8-byte double precision value, as
> > > stored internally, and assign its value to a PHP float variable without
> > > having the bytes misinterpreted as a character string.
> >
> > Does it get misinterpreted, or do you just want to be sure?
> >
> > The documentation says -
> >
> > "Some references to the type "double" may remain in the manual. Consider
> double the same as float; the two names exist only for historic reasons."
> >
> > Does this cover your case?
> >
> > Iv
> >
> No.
>
> Example: I extract the 8 bytes 40 58 FF 5C 28 F5 C2 8F from an external
> file, which is the internal double precision float representation of the
> decimal value 99.99. Starting with that byte string, how can I create a PHP
> variable whose value is 99.99?
Reversing the order of bytes then using unpack('d') works for me.
<?php
$bytes = pack('H*', '4058FF5C28F5C28F');
$output = unpack('d', strrev($bytes));
print array_shift($output) . "\n";
// 99.99
?>