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