RE: [PHP] Best way to convert Little-Endian DWORD to string
> -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
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
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