纯的Ole-C。我该如何解释这个c-struct

时间:2012-06-25 22:16:10

标签: c struct

  

可能重复:
  What does 'unsigned temp:3' means

我正在编写一个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的位向量子字段。

谢谢,
道格

2 个答案:

答案 0 :(得分:4)

这些是位字段。您可以像结构中的任何其他字段一样访问它们。冒号后面的数字定义了用于存储该字段的位数。例如,qual:8表示qual可以保存(仅)0到255之间的值。

我应该补充说:0是特殊的 - 这意味着不应该从当前项(int,uint32_t等)中分配更多的位字段 - 下一位字段将来自新的底层字段存储单元。

答案 1 :(得分:2)

这些是bit-fields,您可以像这样引用它们:

bam1_core_t.binbam1_core_t.qual等。

这些位字段允许您更紧密地打包数据。 :右侧的数字指定应该将多少位分配给与左侧标识符关联的位置。

您在C中看到的唯一位置是struct s或union s。