| Newsgroups |
php.general |
| Message-ID |
<[email protected]> |
In the desktop app's memory the data is packed end-to-end already:
typedef struct MANGOpie
{
unsigned char mango;
unsigned short pie;
}
MANGOpie;
MANGOpie * pies = (MANGOpie *)malloc(count*sizeof(MANGOpie));
...and the entire 'pies' array is sent to the PHP script as binary data
using PUT.
On February 23, 2010, Nathan Nobbe <[email protected]> wrote:
> On Monday, February 22, 2010, [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?
>
>
> I'm curious how you are getting to the point of calling pack() in the
> first place. can we see the bit of your script that interacts with
> this c code?
>
> -nathan
>
>