bytestring(convert(Ptr{UInt8}, fevent.message + sizeof(UInt16)),
unsafe_load(convert(Ptr{UInt16}, fevent.message)))On Tue, Mar 3, 2015 at 4:49 AM Roger Herikstad <[email protected]> wrote: > Dear group, > I am trying to write an interface to a c library that reads data files in > a particular format. One of the pieces of data I am trying to read is a > string, encoded like this: > > typedef struct { > INT16 len; > char c; > } LSTRING; > > > This is string is a member of larger structure > > typedef struct { > > ... a bunch of simple bit types > LSTRING *message; > } FEVENT > > I have created a Julia type that maps to this structure, where the LSTRING > type is defined like this > > type LSTRING > len::Int16 > c::Uint8 > end > > > Using ccall, I can successfully extract the FEVENT structure from the > file. but of course the message field is returned as a pointer. My > questions is how can I follow this pointer to get the actual data of the > string? In an example written in C, the string is extracted by reading an > array starting at the address of the field 'c' in LSTRING. > Initially, I was using unsafe_load to copy the data that '*message' points > to, but then I lose the original memory location of 'c'. > > Is there a way for me to do C-style pointer arithmetic in Julia to get the > data from my string. Something like this? > > char *msg = &(fevent->message->c); > > > Any insight into this would be greatly appreciated. I suppose I could > write the code to access LSTRING in C, but I was hoping to avoid that. > > > > > >
