谁来详细解释下这段代码?
// align ptr to nearest DWORD
WORD* AlignDWORD(WORD* ptr)
{
ptr++; // round up to nearest DWORD
LPARAM lp = (LPARAM)ptr; // convert to long
lp &= 0xFFFFFFFC; // make sure on DWORD boundary
return (WORD*)lp;
}
[解决办法]
先把ptr转换成long型,然后1111 1111 1111 1111 1111 1111 1111 1101相与,返回相与后的结果
[解决办法]
0xFFFFFFFC = 1111...1100
保证指针指向的地址值最后两位为0,最后两位为零就保证了地址值是按照+4的方式跳变的
这就能理解了吧
100 = 4
1000 = 8
1100 = 12
...