Re: Best way to convert Little-Endian DWORD to string

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 30, 2007 9:19 am, Tijnema wrote:
> Maybe quite strange question and quite off topic, but there's PHP
> involved :)
>
> I want to read out files, and then I come across 4byte DWORD values,
> they are stored in little endian values, but how do I get in a PHP
> string (as the values are too large for integer)
>
> My code is currently this:
> $data = fread($fp,4);
> $value =
> (ord(substr($data,3,1))*256*256*256)+(ord(substr($data,2,1))*256*256)+(ord(substr($data,1,1))*256)+(ord(substr($data,0,1)));
>
> and now $value contains the value of the DWORD, it works fine, but it
> seems that it could be done a lot easier :)
> Anyone experience with it?

Easiest might be to read one byte at a time...

$byte0 = fread($fp, 1);
$byte1 = fread($fp, 1);
$byte2 = fread($fp, 1);
$byte3 = fread($fp, 1);
$value = $byte3 * 0xffffff + $byte2 * 0xffff + $byte1 * 0xff + $byte0;

If that makes fread too slow, which it might, but buffering should be
able to handle 4 bytes...

You could also do:
$byte0 = 0xff000000 & $data;
$byte1 = 0x00ff0000 & $data;
$byte2 = 0x0000ff00 & $data;
$byte3 = 0x000000ff & $data;
//same $value line as above

As far as shifting goes...  I *think* this would do it:

$byte3 = $data >> 24;
$byte2 = ($data >> 16) & 0xff;
$byte1 = ($data >> 8) & 0xff;
$byte0 = $data & 0xff;

-- 
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some indie artist.
http://cdbaby.com/browse/from/lynch
Yeah, I get a buck. So?

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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux