假设你有一个整数a = 0x12345678
&短b = 0xabcd
如何与另一组半字节的整数替换给啃
我想要做什么用半字节从short b
更换给出半字节integer a
例如:用b = 0xabcd
(其中d = 0的半字节,c = 0的半字节替换a = 0x12345678
(其中8 =第0个半字节,7 =第1个半字节,6 =第2个半字节等等)中的0,2,5,7个半字节)第一级,b =第二级,&等等......)
我的做法是 -
- 清除我们打算从
a
更换位。 像a = 0x02045070
- 创建从短
b
面具像mask = 0xa0b00c0d
- 按位
OR
他们得到的结果。result = a| mask
即result = 0xa2b45c7d
因此更换了半字节。
我的问题是我不知道任何高效方式从给定的short b
创建(步骤2等)所需的掩码,如果你能给我一个高效方式这对我很有帮助,我对此表示感谢;)
请询问是否需要更多信息。
编辑:
我的代码来解决这个问题(还不够好,虽然)
任何改善的高度赞赏。
int index[4] = {0,1,5,7}; // Given nibbles to be replaced in integer
int s = 0x01024300; // integer mask i.e. cleared nibbles
int r = 0x0000abcd; // short (converted to int)
r = ((r & 0x0000000f) << 4*(index[0]-0)) |
((r & 0x000000f0) << 4*(index[1]-1)) |
((r & 0x00000f00) << 4*(index[2]-2)) |
((r & 0x0000f000) << 4*(index[3]-3));
s = s|r;
result =(a&ffff0000)| b –
@VikashKumarVerma请参阅示例,我想替换**给定的半字节**,您的解决方案将始终替换前四个半字节。 – Mrmj
“给我一种有效的方式” - >在你的平台上,是否使用乘法高效? – chux