我正在编写一个iOS应用程序,并且必须处理一些遗留的简单C:
typedef struct {
int32_t tid;
int32_t pos;
uint32_t bin:16, qual:8, l_qname:8;
uint32_t flag:16, n_cigar:16;
int32_t l_qseq;
int32_t mtid;
int32_t mpos;
int32_t isize;
} bam1_core_t;
我的问题涉及行uint32_t bin:16, qual:8, l_qname:8;
有人可以告诉我如何访问这些字段,这些字段在我看来是某种32位int的位向量子字段。
谢谢,
道格
答案 0 :(得分:4)
这些是位字段。您可以像结构中的任何其他字段一样访问它们。冒号后面的数字定义了用于存储该字段的位数。例如,qual:8
表示qual
可以保存(仅)0到255之间的值。
我应该补充说:0
是特殊的 - 这意味着不应该从当前项(int,uint32_t等)中分配更多的位字段 - 下一位字段将来自新的底层字段存储单元。
答案 1 :(得分:2)
这些是bit-fields,您可以像这样引用它们:
bam1_core_t.bin
或bam1_core_t.qual
等。
这些位字段允许您更紧密地打包数据。 :
右侧的数字指定应该将多少位分配给与左侧标识符关联的位置。
您在C中看到的唯一位置是struct
s或union
s。