簡體   English   中英

具有位域的奇數大小的結構

[英]odd sized structure with bitfields

我正在嘗試將一些位字段放入3字節結構中

#pragma pack(push, 1)
typedef struct  _DSTEntry {
    uint8_t reserved :6;
    uint8_t startMonth:4;
    uint8_t startDay:5;
    uint8_t endMonth:4;
    uint8_t endDay:5;
} __attribute__((packed)) DSTEntry;
#pragma pop

但是,盡管所有位的總和為24,但DSTEntry的sizeof始終為5。我使用的是gcc 5.3.0。

如果您可以自由排列結構中的元素,則可以嘗試以下操作:

typedef struct  _DSTEntry {
    uint16_t reserved :6;
    uint16_t startDay:5;
    uint16_t endDay:5;
    uint8_t startMonth:4;
    uint8_t endMonth:4;
} __attribute__((packed)) DSTEntry;

這對我來說是3號,gcc 4.9.2。 如果字段必須保持該順序,那么我認為最好的方法是使用四個字節:

typedef struct  _DSTEntry {
    uint16_t reserved :6;
    uint16_t startDay:5;
    uint16_t startMonth:4;
    uint8_t endDay:5;
    uint8_t endMonth:4;
} __attribute__((packed)) DSTEntry;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM