2012-06-25 31 views
-1

可能重複:
What does 'unsigned temp:3' meansPlain-Ole-C。我該如何解釋這個C-結構

我寫的iOS應用,並有處理一些遺留純OLE 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;有人可以請告訴我如何訪問這些字段,這些字段對我而言似乎是某種bit-v一個32位int的ector子字段。

感謝,
道格

+0

就是這樣。 – Ben

+1

這是一個有點領域,具有諷刺意味的是,這個問題剛剛問了一會兒:http://stackoverflow.com/questions/11197931/what-is-meaning-of-in-struct-c/11197966#11197966 –

+1

哇。應該先檢查一下。 RTFSO就是這樣。關閉。 – dugla

回答

2

這些bit-fields,你是指他們是這樣的:

bam1_core_t.binbam1_core_t.qual

這些位字段可以更緊密地打包數據。 :右邊的數字指定應將多少位分配給與左側標識符關聯的位置。

您在C中看到的唯一地方是struct s或union s。

4

這些是位域。您可以像訪問結構中的其他字段一樣訪問它們。冒號後面的數字定義了用於存儲該字段的位數。例如,qual:8意味着qual可以容納值(只),從0到255

我要補充一點,:0是特殊的 - 這意味着沒有更多的位字段應該從目前的項目分配(INT,uint32_t的,等等) - 下一個位字段將來自一個新的底層存儲單元。