casting and arrays..

gareis dhasenan at gmail.com
Sat Mar 10 19:06:39 PST 2007


Chris Warwick wrote:
> "Kirk McDonald" <kirklin.mcdonald at gmail.com> wrote in message 
> news:esvk4l$28mi$1 at digitalmars.com...
>> Chris Warwick wrote:
>>> "Jarrett Billingsley" <kb3ctd2 at yahoo.com> wrote in message 
>>> news:esvhdv$261a$1 at digitalmars.com...
>>>> "Chris Warwick" <sp at m.me.not> wrote in message 
>>>> news:esvf5h$2317$1 at digitalmars.com...
>>>>> std.file.read(filename);
>>>>>
>>>>> returns type void[]
>>> Ok say you have that void[] array returned from std.read.file(). Whats 
>>> the best way to copy a struct out from the void array? Only way i can 
>>> think is memcpy, or some heavy duty casting and pointers. Is there a 
>>> cleaner - pretier way with D?
>>>
>>> thanks,
>>>
>>> cw
>> Assuming that array.length == YourStruct.sizeof, you can say
>>     cast(YourStruct*)array.ptr
>> to treat the array as the struct in-place.
> 
> Well i cant realy do that cause im reading a binary file in, and then i want 
> to parse it, extract structs and various types here and there.

Then you need to do pointer arithmetic, it seems. Assuming your struct 
has a deserializer method that takes a void*:
---
for (int i = 0; i < array.length; i++) {
     if (someStructStartsHere()) {
         someStruct s;
         s.deserialize(array.ptr + i);
         do_stuff_with_someStruct (s);
     }
}
---

That should probably work.

> cheers,
> 
> cw
> 
> 


More information about the Digitalmars-d-learn mailing list