现在的位置: 首页 > 综合 > 正文

c里面的冒号——位域定义器

2014年02月24日 ⁄ 综合 ⁄ 共 1080字 ⁄ 字号 评论关闭

 typedef struct _RTP_header {
        /* byte 0 */
        #if (BYTE_ORDER == LITTLE_ENDIAN)
            unsigned char csrc_len:4;        /* expect 0 */
            unsigned char extension:1;        /* expect 1, see RTP_OP below */
            unsigned char padding:1;        /* expect 0 */
            unsigned char version:2;        /* expect 2 */
        #elif (BYTE_ORDER == BIG_ENDIAN)
            unsigned char version:2;
            unsigned char padding:1;
            unsigned char extension:1;
            unsigned char csrc_len:4;
        #else
            #error Neither big nor little
        #endif
        /* byte 1 */
        #if (BYTE_ORDER == LITTLE_ENDIAN)
            unsigned char payload:7;        /* RTP_PAYLOAD_RTSP */
            unsigned char marker:1;            /* expect 1 */
        #elif (BYTE_ORDER == BIG_ENDIAN)
            unsigned char marker:1;
            unsigned char payload:7;
        #endif
        /* bytes 2, 3 */
        unsigned short seq_no;
        /* bytes 4-7 */
        unsigned int timestamp;
        /* bytes 8-11 */
        unsigned int ssrc;                    /* stream number is used here. */
    } RTP_header;

 

以上结构定义中,出现了很多unsigned char csrc_len:4; 类似的定义,这些定义中有一个冒号,后面跟一个数字,冒号在这里是充当位域定义器,是说明该字段在一个字节中占多少bit,其单位是bit。如此理解,上面的结构就很容易理解了。

抱歉!评论已关闭.