unpacking an array of structs...
| From: | php.list@juun.com | Date: | Tue, 23 Feb 2010 06:29:07 +0000 |
| Subject: | unpacking an array of structs... | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-302292@lists.php.net to get a copy of this message | ||
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.