按位操纵地址

时间:2015-01-05 11:58:34

标签: c

我有一个十六进制的地址,比如007b183c。我想改变它的位。 我已经读过一些关于位移和屏蔽的内容(没有双关语),但我不知道如何以位格式获取地址。我该怎么做?

2 个答案:

答案 0 :(得分:2)

假设你正在谈论操纵地址位,如果你有这样的地址:

char * p = (char *)0x007b183c;

并且你想进行某种位操作,例如,向上舍入到下一个16字节对齐的地址,然后转换为合适的int类型,进行操作,然后强制转换,例如。

char *p_aligned - (char *)(((uint_ptr_t)p + 15) & ~15); // p_aligned = 0x007b1840

答案 1 :(得分:1)

如果我理解正确,你有一个指向某个位置的指针,并希望在中移动它。

那不会奏效。指针指向一个字节位置,在这个意义上是不可分割的。地址的最低位指定了什么字节。

你必须要么读取邻居字节,然后使用这两个来获得你想要的值,或者那个意义上的东西,但是你不能指向各个位。