将 8 位值掩码为 32 位值

Mask 8 bit value into 32 bit value

我有一个 8 位值,我想将其存储在现有的 32 位值中,同时仅更新 8 位上的数据并保持其他 24 位与以前一样。

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

我的第一个想法是将 0xFFFFFF00 与我要存储的 8 位值进行或运算,使其成为 0xFFFFFFXX。然后我打算将它与 32 位值相加,但我意识到如果 32 位值的最后一个字节是 00 并且我想存储 01,那将不起作用。然后我想我会只使用我原来的 8 位值并将其直接或运算成 32 位值,但如果 32 位值中的最后一个字节是 01 而我想存储 00,那将不起作用。

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

您已经非常接近了:首先,通过与 0xFFFFFF00 进行“与”运算将目标 32 位值的最低字节归零,然后在您的 8 位值中进行“或”运算。

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