Works fine here.
Code:
$ cat bar.c
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
//FLAC METADATA_BLOCK_STREAMINFO
struct streaminfo {
uint16_t min_block_size:16; //16 bits, 0 bits left
uint16_t max_block_size:16; //32 bits, 0 bits left
uint32_t min_frame_size:24; //64 bits, 8 bits left
uint32_t max_frame_size:24; //96 bits, 16 bits left
uint32_t sample_rate:20; //128 bits, 28 bits left
uint32_t num_channels:3; //128 bits, 25 bits left
uint32_t bits_per_sample:5; //128 bits, 20 bits left
uint64_t total_samples:36; //192 bits, 48 bits left
uint32_t md5_sig1:32; //Why doesn't this fit in the 192?
//uint16_t md5_sig2:16;
} __attribute__ ((packed));
int main()
{
printf("%zd\n", sizeof(struct streaminfo) * CHAR_BIT );
return 0;
}
$ gcc -v
gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
$ ./a.out
176
Except your comments are wrong.