2014-04-01 59 views
0

我试着在C++中掩盖一个地址。这是我试过的。如何在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

错误在于''和'INT32 *''int' –

+0

此外,0xff不等于0xff00而是0x00ff(可能它只是一个错字问题) – Losiowaty

回答

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在十进制和十六进制格式的值。

+0

我不认为是这样的情况: 'addr:140737488345600' 'sec_addr:0' sec_addr如何为0? – pistal

+0

我的不好。我和255一起。现在用0xff00。 :) – pistal

+0

'140737488345600'是十六进制的'7FFFFFFFDA00'。 '7FFFFFFFDA00&0000000000FF = 000000000000' –

0

第一行应该是

INT32 myaddr = (INT32)addr; 

假设你是一个32位平台上。