将8位值屏蔽为32位值

时间:2015-09-22 10:22:10

标签: c++ bit-manipulation

我有一个8位值,我希望存储在一个现有的32位值中,而只更新8位数据并保持其他24位之前的数据。

例如,我可能想将0x01(0x00000001)存储到现有值0x01000100中,我希望结果为0x01000101。

我的第一个想法是在0xFFFFFF00中将OR转换为我要存储的8位值,使其成为0xFFFFFFXX。然后我会把它改为32位值,但我意识到如果32位值的00作为最后一个字节并且我想存储01,它就不会工作。然后我想我会用我原来的8位值,并将其直接输入32位值,但如果32位值中的最后一个字节为01并且我想存储00,则不会起作用。

我意识到这可能有点难以阅读但基本上我想要做的是将32位值0xXXXXXXXX和8位值0xYY(0x000000YY)合并为0xXXXXXXYY

2 个答案:

答案 0 :(得分:4)

你非常接近:首先,将目标32位值的最低字节归零,然后用0xFFFFFF进行AND运算,然后在8位值中进行OR运算。

答案 1 :(得分:4)

x = 0xXXXXXXXX;
y = 0x000000YY;
ret = (x & 0xFFFFFF00) | (y & 0x000000FF);