Jump to page: 1 2
Thread overview
What is the D way to map a binary file to a structure?
Aug 29, 2015
cym13
Aug 29, 2015
drug
Aug 29, 2015
cym13
Aug 29, 2015
drug
Aug 29, 2015
cym13
Aug 29, 2015
drug
Aug 29, 2015
Laeeth Isharc
Aug 29, 2015
cym13
Aug 29, 2015
Suliman
Aug 30, 2015
Atila Neves
Aug 31, 2015
mzfhhhh
Aug 31, 2015
cym13
August 29, 2015
Hi,

Let's say I have a simple binary file whose structure is well-known. Here is
an example which stores points:

struct Point {
    long x;
    long y;
    long z;
}

struct BinFile {
    uint    magicNumber;  // Some identifier
    ulong   pointsNumber;
    Point[] points;       // Array of pointsNumber points.
}

What is the best way to read some file and fill a structure with it? Would
reading the file into a void[] and then casting it to the struct work with
things like internal struct padding?

August 29, 2015
29.08.2015 15:56, cym13 пишет:
> Hi,
>
> Let's say I have a simple binary file whose structure is well-known.
> Here is
> an example which stores points:
>
> struct Point {
>      long x;
>      long y;
>      long z;
> }
>
> struct BinFile {
>      uint    magicNumber;  // Some identifier
>      ulong   pointsNumber;
>      Point[] points;       // Array of pointsNumber points.
> }
>
> What is the best way to read some file and fill a structure with it? Would
> reading the file into a void[] and then casting it to the struct work with
> things like internal struct padding?
>
Try, for example, MessagePack https://github.com/msgpack/msgpack-d.git
August 29, 2015
On Saturday, 29 August 2015 at 13:56:10 UTC, drug wrote:
> Try, for example, MessagePack https://github.com/msgpack/msgpack-d.git

Thanks, but it isn't answering the question at all. I'm not looking for a
serialization method, I'm looking for the best way to read a binary file.

August 29, 2015
29.08.2015 17:17, cym13 пишет:
> On Saturday, 29 August 2015 at 13:56:10 UTC, drug wrote:
>> Try, for example, MessagePack https://github.com/msgpack/msgpack-d.git
>
> Thanks, but it isn't answering the question at all. I'm not looking for a
> serialization method, I'm looking for the best way to read a binary file.
>
It depends on what is the best for you. But using MessagePack you can easily read the file and fill a structure with it.
August 29, 2015
On Saturday, 29 August 2015 at 14:52:51 UTC, drug wrote:
> 29.08.2015 17:17, cym13 пишет:
>> On Saturday, 29 August 2015 at 13:56:10 UTC, drug wrote:
>>> Try, for example, MessagePack https://github.com/msgpack/msgpack-d.git
>>
>> Thanks, but it isn't answering the question at all. I'm not looking for a
>> serialization method, I'm looking for the best way to read a binary file.
>>
> It depends on what is the best for you. But using MessagePack you can easily read the file and fill a structure with it.

No, because messagepack is one format of binary file. That isn't going to be of any help for any other binary file format. It is not a way to read binary files. It is a serialization format.
August 29, 2015
29.08.2015 18:05, cym13 пишет:
> On Saturday, 29 August 2015 at 14:52:51 UTC, drug wrote:
>> 29.08.2015 17:17, cym13 пишет:
>>> On Saturday, 29 August 2015 at 13:56:10 UTC, drug wrote:
>>>> Try, for example, MessagePack https://github.com/msgpack/msgpack-d.git
>>>
>>> Thanks, but it isn't answering the question at all. I'm not looking
>>> for a
>>> serialization method, I'm looking for the best way to read a binary
>>> file.
>>>
>> It depends on what is the best for you. But using MessagePack you can
>> easily read the file and fill a structure with it.
>
> No, because messagepack is one format of binary file. That isn't going
> to be of any help for any other binary file format. It is not a way to
> read binary files. It is a serialization format.
I see.
August 29, 2015
On Saturday, 29 August 2015 at 12:56:08 UTC, cym13 wrote:
> Hi,
>
> Let's say I have a simple binary file whose structure is well-known. Here is
> an example which stores points:
>
> struct Point {
>     long x;
>     long y;
>     long z;
> }
>
> struct BinFile {
>     uint    magicNumber;  // Some identifier
>     ulong   pointsNumber;
>     Point[] points;       // Array of pointsNumber points.
> }
>
> What is the best way to read some file and fill a structure with it? Would
> reading the file into a void[] and then casting it to the struct work with
> things like internal struct padding?

Align(1) ?
August 29, 2015
On Saturday, 29 August 2015 at 16:47:23 UTC, Laeeth Isharc wrote:
> Align(1) ?

That should do it, thanks :)


August 29, 2015
On Saturday, 29 August 2015 at 16:55:44 UTC, cym13 wrote:
> On Saturday, 29 August 2015 at 16:47:23 UTC, Laeeth Isharc wrote:
>> Align(1) ?
>
> That should do it, thanks :)

Do not forget to post code example, please, it's interesting to look at your solution...
August 30, 2015
On Saturday, 29 August 2015 at 12:56:08 UTC, cym13 wrote:
> Hi,
>
> Let's say I have a simple binary file whose structure is well-known. Here is
> an example which stores points:
>
> struct Point {
>     long x;
>     long y;
>     long z;
> }
>
> struct BinFile {
>     uint    magicNumber;  // Some identifier
>     ulong   pointsNumber;
>     Point[] points;       // Array of pointsNumber points.
> }
>
> What is the best way to read some file and fill a structure with it? Would
> reading the file into a void[] and then casting it to the struct work with
> things like internal struct padding?

https://github.com/atilaneves/cerealed

Just pass the bytes obtained from reading the file to `Decerealiser`.

Atila
« First   ‹ Prev
1 2