[英]c++: how to put relevant bits from uint32 into uint8?
我有一個uint32,上面已經標記了一些位:
uint32 i = 0;
i |= (1 << 0);
i |= (1 << 5);
i |= (1 << 13);
i |= (1 << 19);
...
我想將其轉換為uint8(通過獲取其前8位的狀態而忽略其余部分)。 顯然我可以這樣做:
uint8 j = 0;
for (int q = 0; q < 8; q++)
{
if (i & (1 << q))
{
j |= (1 << q);
}
}
但是,是否有一種花哨的按位操作,我可以使用一次轉移就將這些位轉移過來而沒有循環?
為什么不僅僅屏蔽最后8位而不是循環查看是否設置了單個位?
const unsigned char bitMask = 0xFF;
j = (i & bitMask);
請注意,盡管C ++ 14允許您立即定義二進制文字
const unsigned char bitMask = 0b1111'1111;
以上就是您所需要的。 以防萬一,如果需要獲取后續的字節位置,請使用相同的掩碼0xFF
,並確保將結果右移以獲取所需的字節值。
您只需將uint32值分配給uint8即可達到相同的結果。
int main()
{
unsigned int i = 0x00000888;
unsigned char j = i;
cout<<hex<<i<<endl;
cout<<hex<<+j<<endl;
return 0;
}
輸出:888 88
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.