Re: [PHP] unpacking an array of structs...

[email protected] (Rene Veerman)
Newsgroups php.general
Message-ID <[email protected]>
have you considered using json as transport?
http://json.org/ has code you can re-use.

On Tue, Feb 23, 2010 at 7:29 AM, [email protected] <[email protected]> wrote:
>
> I have a desktop app that has a data structure that looks like this:
>
> typedef struct MANGOpie
> {
>   unsigned char   mango;
>   unsigned short  pie;
> }
> MANGOpie;
>
>
>
> I manage a C array of these things in memory:
>
> MANGOpie * pies = (MANGOpie *)malloc(count*sizeof(MANGOpie));
>
>
>
>
> I pass these to a PHP script on my webserver who needs to unpack the array
> of structs.
>
> The unpack() PHP function appears to be what I need, but it doesn't like the
> formatting I'm using to describe an array of these structs:
>
> "(Cmango/npie)*"
>
> What it doesn't like are the parentheses.  I've tried brackets and curlies
> too, but nothing works.  I have to have the parentheses to tell the parser
> to repeat the entire struct:
>
> mango
> pie
> mango
> pie
> mango
> pie
> ...
>
>
>
> Formatting without the parentheses -- "Cmango/npie*" -- is:
>
> mango
> pie
> pie
> pie
> pie
> pie
> ...
>
>
>
> One workaround is to drop the struct and just manage two separate parallel
> arrays of each data type in the desktop app:
>
> unsigned char *   mangos = (unsigned char  *)malloc(count*sizeof(unsigned
> char));
> unsigned short *  pies   = (unsigned short *)malloc(count*sizeof(unsigned
> short));
>
> With PHP unpack() format strings:
>
> "Cmango*"
> "npie*"
>
> But, I'd rather keep the struct for the sake of code clarity and neatness.
>
>
>
> Another would be to iterate thru the binary data, unpacking one struct at a
> time, but that would be slower, presumably.
>
>
>
>
>
>
>
>
>
> Anyone know the trick to this?
>
> Thanks.
>
>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.