2010-11-06 33 views

回答

1
int bitsToInt(int value, int s, int e) { 
    int mask = ((1 << (e - s + 1)) - 1) << s; 
    return (value & mask) >> s; 
} 

bitsToInt(7,2,3)返回1

想多一點,如果你想要的是到一個詮釋,你可以塞住幾個值做好bitfields並讓編譯器擔心掩碼和轉換。

+0

似乎工作,我只是試圖用wiki中的信息編寫一個,與那個簡單的代碼相比,我的工作會非常糟糕。 – Kaije 2010-11-06 19:00:30

+0

可能存在一些邊界問題(我沒有廣泛測試代碼),請小心使用。 – DennyRolling 2010-11-06 19:37:48

2

您可以通過使用位AND運算符做到這一點。

int x = SOME_VALUE; 

// check 20-25 bits 
if (x & 0x3F00000) { 
    // any of bits on 
} 
3

您將在整數和「掩碼」值之間使用按位與運算符,該值忽略所有其他位。因此,像這樣:

const int BIT_4 = 0x8; 

// .... 

int val = /* ... */; 
if ((val & BIT_4) != 0) 
    ; // Bit 4 is ON! 
else 
    ; // Bit 4 is OFF 
+0

我會說'1 << 3'而不是'0x8'。 (此外,從零開始,這是第3位,而不是第4位。) – asveikau 2010-11-06 18:54:54

1
uint32_t 
get_bits_20_to_24(uint32_t i_) 
{ 
    union { 
    struct 
    { 
     uint32_t bits1 : 20; 
     uint32_t bits2 : 5; 
     uint32_t bits3 : 7; 
    } s; 
    uint32_t i; 
    }; 

    i = i_; 
    return s.bits2; 
} 
相關問題