如何在c ++中使用位掩码?

时间:2014-04-01 08:39:52

标签: c++ bitmask

我试着用c ++掩盖一个地址。这就是我尝试过的。

INT32 * myaddr = (INT32*)addr; // This converted 'addr' to the hexadecimal format -- 'myaddr'

现在我如何and它是0xff00?

UINT32 sec_addr = (myaddr & 0xff);

当我尝试执行以下操作时.. 这是我得到的错误:

error: invalid operands of types ‘LEVEL_BASE::INT32*’ and ‘int’ to binary ‘operator&’

我在做什么错误?

2 个答案:

答案 0 :(得分:2)

您正在操作带整数的指针。使用原始addr变量,这是一个整数,而不是myaddr

UINT32 sec_addr = addr & 0xff; // according to your question, this should be 0xFF00

BTW:你的第一行:

INT32 * myaddr = (INT32*)addr; // This converted 'addr' to the hexadecimal format -- 'myaddr'

不会将addr转换为"十六进制格式"。十六进制只是一种在打印时表示数字的方法。 addrmyaddr都可以显示在您想要的任何数字基础中。

printf ("%d %X\n", addr, addr);

以十进制和十六进制格式打印addr的值。

答案 1 :(得分:0)

第一行应该是

INT32 myaddr = (INT32)addr;

假设您使用的是32位平台。