2014-04-01 60 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位平臺上。