按位操作地址

Bitwise manipulate address

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

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

char * p = (char *)0x007b183c;

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

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

如果我没理解错的话,你有一个指向某个位置的指针,并希望在 内移动它。

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

您将不得不读取相邻字节,然后使用这两个字节来获取您想要的值,或者某种意义上的某些东西,但您不能指向单独的位。