Re: unpack on offsets in binary data in variable?
| From: | Greg Beaver | Date: | Tue, 09 Jan 2007 18:14:53 +0000 |
| Subject: | Re: unpack on offsets in binary data in variable? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-246806@lists.php.net to get a copy of this message | ||
Markus Fischer wrote:
> Hi,
>
> I'm searching for an efficient way to use unpack on binary data within a
> variable (php 5.1.something). In the past I was doing
>
> fopen
> fseek
> unpack( fread(...)
> fseek
> etc.
>
> Now this time I need to do the same, but I don't have an actual file: my
> data is only in a variable and I don't want to operate on a file but the
> variable within.
>
> I was thinking about using substr() and passing the small chunks of data
> I need to the unpack() function.
>
> Question: does this work without problems on arbitrary binary, maybe
> containing zero-byte values reliable?
Hi Markus,
This does work fine, but beware of strange behavior with unpack() when
using unsigned types V, N, or L. I recently was bitten by different
behavior on 32-bit and 64-bit OSes unpacking a large unsigned integer.
If you need unsigned, use sprintf("%u", $whatever) to get the actual
integer.
substr() works nicely on strings for unpack(), see how PHP_Archive uses
it in http://cvs.php.net/viewvc.cgi/pear/PHP_Archive/Archive.php
. If
you are writing for forward compatibility with PHP 6's unicode and plan
to accept input from a variety of sources, you may want to cast the
string to binary type.
Greg