RE: [PHP] Best way to convert Little-Endian DWORD to string

2007-05-30 Thread Edward Kay


> -Original Message-
> From: Tijnema [mailto:[EMAIL PROTECTED]
> Sent: 30 May 2007 15:20
> To: php
> Subject: [PHP] Best way to convert Little-Endian DWORD to string
> 
> 
> Hi,
> 
> 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*2
> 56)+(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?

Could you not use the << bitwise operator?

Edward

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



Re: [PHP] Best way to convert Little-Endian DWORD to string

2007-05-30 Thread Tijnema

On 5/30/07, Edward Kay <[EMAIL PROTECTED]> wrote:



> -Original Message-
> From: Tijnema [mailto:[EMAIL PROTECTED]
> Sent: 30 May 2007 15:20
> To: php
> Subject: [PHP] Best way to convert Little-Endian DWORD to string
>
>
> Hi,
>
> 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*2
> 56)+(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?

Could you not use the << bitwise operator?

Edward


How could I use them here?
I read the docs for bitwise operators, and they tell me what they do,
but now how to use it :(

Tijnema

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



Re: [PHP] Best way to convert Little-Endian DWORD to string

2007-05-30 Thread Richard Lynch
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 * 0xff + $byte2 * 0x + $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 = 0xff00 & $data;
$byte1 = 0x00ff & $data;
$byte2 = 0xff00 & $data;
$byte3 = 0x00ff & $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