道歉,如果这是一个基本问题,但我在:
的定义中第一次看到这些冒号(struct
)。这些冒号做了什么?
struct gsm48_meas_res {
uint8_t rxlev_full:6,
dtx_used:1,
ba_used:1;
uint8_t rxlev_sub:6,
meas_valid:1,
spare:1;
uint8_t no_nc_n_hi:1,
rxqual_sub:3,
rxqual_full:3,
spare2:1;
uint8_t rxlev_nc1:6,
no_nc_n_lo:2;
uint8_t bsic_nc1_hi:3,
bcch_f_nc1:5;
uint8_t rxlev_nc2_hi:5,
bsic_nc1_lo:3;
uint8_t bsic_nc2_hi:2,
bcch_f_nc2:5,
rxlev_nc2_lo:1;
uint8_t rxlev_nc3_hi:4,
bsic_nc2_lo:4;
uint8_t bsic_nc3_hi:1,
bcch_f_nc3:5,
rxlev_nc3_lo:2;
uint8_t rxlev_nc4_hi:3,
bsic_nc3_lo:5;
uint8_t bcch_f_nc4:5,
rxlev_nc4_lo:3;
uint8_t rxlev_nc5_hi:2,
bsic_nc4:6;
uint8_t bcch_f_nc5_hi:4,
rxlev_nc5_lo:4;
uint8_t rxlev_nc6_hi:1,
bsic_nc5:6,
bcch_f_nc5_lo:1;
uint8_t bcch_f_nc6_hi:3,
rxlev_nc6_lo:5;
uint8_t bsic_nc6:6,
bcch_f_nc6_lo:2;
} __attribute__ ((packed));
我在为这些uint8_t
变量赋值时遇到了一些问题。最初我认为这是默认的任务,但在耗尽所有其他可能性后,我认为它与这些冒号有关。
答案 0 :(得分:2)
这是一个比特领域,这是任何标准都很难控制的。例如
uint8_t rxlev_full:6,
dtx_used:1,
ba_used:1;
表示“在内存中的某处,给我6位然后1位然后1位”。您无法以可移植的方式知道或假设位顺序 - 它是特定于编译器的。此外,仅为_Bool
,signed int
和unsigned int
定义标准位字段。使用uint8_t
是非标准扩展。
所以不知道这段代码究竟会做什么。您必须阅读编译器手册以了解具体信息。