digitalmars.D.learn - how to define a struct without padding
- aki (40/40) May 24 2017 Hi,
- Adam D. Ruppe (8/9) May 24 2017 align(1) on the outside removes padding from the end.
- aki (4/8) May 24 2017 My problem is resolved. Thank you for the quick reply.
Hi,
This is a code ported from some windows C program.
It is the Windows WAVE file header definition.
The field layout is the same with C,
but it has extra 2 bytes at the end,
sizeof(WAVEHEADER) in C is 46 while WAVEHEADER.sizeof in D is 48.
Why it still have padding in spite of "align(1)" ?
How can I remove extra padding bytes?
module main;
import std.stdio;
alias ushort WORD;
alias uint DWORD;
align(1) struct WAVEFORMATEX {
WORD wFormatTag; /* format type */
WORD nChannels; /* number of channels (i.e.
mono, stereo...) */
DWORD nSamplesPerSec; /* sample rate */
DWORD nAvgBytesPerSec; /* for buffer estimation */
WORD nBlockAlign; /* block size of data */
WORD wBitsPerSample; /* number of bits per sample
of mono data */
WORD cbSize; /* the count in bytes of the
size of */
/* extra information (after cbSize) */
};
align(1) struct WAVEHEADER {
char[4] szRIFF;
int lRIFFSize;
char[4] szWave;
char[4] szFmt;
int lFmtSize;
WAVEFORMATEX wfex;
char[4] szData;
int lDataSize;
};
void main() {
writeln(WAVEHEADER.sizeof); // 48; but it must be 46
}
Thanks,
Aki
May 24 2017
On Thursday, 25 May 2017 at 01:25:44 UTC, aki wrote:
align(1) struct WAVEFORMATEX {
align(1) on the outside removes padding from the end.
You also need `align(1):` on the inside to move all the padding
to the end.
align(1) struct NAME {
align(1):
members
}
May 24 2017
On Thursday, 25 May 2017 at 01:34:35 UTC, Adam D. Ruppe wrote:
align(1) struct NAME {
align(1):
members
}
My problem is resolved. Thank you for the quick reply.
Thanks,
Aki
May 24 2017








aki <aki google.com>