區(qū)分大小端的位操作

引言

? ? ? ?大小端一直是一個(gè)比較讓人頭疼的問題,尤其是當(dāng)其和位運(yùn)算相結(jié)合的時(shí)候。在工作當(dāng)中,我們項(xiàng)目的正式的上板環(huán)境是大端環(huán)境;ft卻是小端環(huán)境。而項(xiàng)目中的消息觸發(fā)機(jī)制偏偏又需要進(jìn)行大量的位操作。為此,我們結(jié)合宏來進(jìn)行函數(shù)封裝,使接口可以比較自由的使用。(定義了EFT宏的是ft環(huán)境,正式上板環(huán)境沒有定義這個(gè)宏)

正文

? ? ? ?下面是共用接口的bit_tool.h的截取

#ifdef _EFT_
/* FT:small end */
#define GET_BITS(type, number, pos, len) (((type)(number) << (pos)) >> (GET_TYPE_BIT_LEN(type) - (len)))
#define CLEAR_BITS(type, number, pos, len) \
    ((number) &= ~((GET_BITS(type, ((type)-1), pos, len)) << (GET_TYPE_BIT_LEN(type) - 1 - (pos))))
#define SET_BITS(type, number, pos, len, field) \
do { \
    CLEAR_BITS(type, number, pos, len); \
    (number) |= (((type)(field) << (GET_TYPE_BIT_LEN(type) - (len))) >> (pos)); \
}while(0)
#else
/* OSS:big end */
#define GET_BITS(type, number, pos, len)  (((type)(number) << (GET_TYPE_BIT_LEN(type) - (pos) - (len))) >> (GET_TYPE_BIT_LEN(type) - (len)))
#define CLEAR_BITS(type, number, pos, len) \
    ((number) &= ~((GET_BITS(type, ((type)-1), pos, len)) >> (pos)))
#define SET_BITS(type, number, pos, len, field) \
do { \
    CLEAR_BITS(type, number, pos, len); \
    (number) |= ((type)(field) << (pos)); \
}while(0)
#endif

? ? ? ?代碼的應(yīng)用示例

    /*
     *利用位運(yùn)算來組虛中斷消息包
   */

    /*
     * vintMsgPara: 只能使用0-15bit,即一個(gè)WORD16
     * bit15:flag, flag為1時(shí),bit0 - 8為業(yè)務(wù)中斷回調(diào)入?yún)?-- 9個(gè)BIT可用參數(shù)
     * bit14 - 9,  event id -- 虛中斷號,薄平臺需要
     * bit0  - 8,  用戶參數(shù)
     */

    SET_BITS_32(vintMsgPara, 0,  9, para);
    SET_BITS_32(vintMsgPara, 9,  6, vintNo);
    SET_BITS_32(vintMsgPara, 15, 1, 1);

   /*
     *與上面函數(shù)對應(yīng)的解虛中斷消息的cellid字段
   */

    cellGid = GET_BITS_32(vintPara, 0, 9);
    UE_LOG_WRN(g_dwUlMacLogId, "DebugTaskVintPdcchCallBack : cellGid = %d!", cellGid);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    zweic閱讀 2,803評論 0 73
  • 1.寫一個(gè)NSString類的實(shí)現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,873評論 2 37
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,594評論 0 6
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景。SDWebImage的原...
    LZM輪回閱讀 2,120評論 0 12
  • 史上第一位變性人的故事。 造物主難免犯錯(cuò),影片為我們呈現(xiàn)了一個(gè)敢于脫俗,敢于糾正大自然的錯(cuò)誤的雀斑女孩的形象。 不...
    腿毛美少女閱讀 268評論 0 0

友情鏈接更多精彩內(nèi)容