私は無線規格を実装していますが、構造とメモリサイズの結合に問題があります。以下の例では、この構造を1バイトのメモリに配置する必要があります(無線標準に従って)が、現在は2バイトのサイズになっています。多くの掘り下げた後、私はそれがユニオンの「サイズ」が3ビットではなくバイトであるためだと理解しています...しかし、これを回避する方法はうまくいきませんでした。私は見ました:
しかし、どちらも私に解決策を与えていないようです。
何か案は?
ありがとう!
#ifdef WIN32
#pragma pack(push)
#pragma pack(1)
#endif
typedef struct three_bit_struct
{
unsigned char bit_a : 1;
unsigned char bit_b : 1;
unsigned char bit_c : 1;
}three_bit_struct_T;
typedef union
{
three_bit_struct_T three_bit_struct;
unsigned char another_three_bits : 3;
}weird_union_T;
typedef struct
{
weird_union_T problem_union;
unsigned char another_bit : 1;
unsigned char reserved : 4;
}my_structure_T;
int _tmain(int argc, _TCHAR* argv[])
{
int size;
size = sizeof(my_structure_T);
return 0;
}
#ifdef WIN32
#pragma pack(pop)
#endif