如何截断c中的地址

时间:2014-04-08 20:07:28

标签: c

我在C中写了一个hexdump函数。

如何将给定地址(void * start)截断为16的最大倍数,小于给定的起始参数? 有一个简单的方法吗? 感谢

3 个答案:

答案 0 :(得分:2)

uintptr_t rounded = ((uintptr_t)start) & ~0xF;

答案 1 :(得分:0)

假设void *address包含您的原始地址:

unsigned long int multiple =  (unsigned long int)address/16;
void *new_address = (void*)(16 * multiple;) 

除以16将给出积分值。

答案 2 :(得分:0)

uintptr_t x = ((uintptr_t)addr) & ~((1 << 4) - 1);

请注意,uintptr_t(来自C99)是一个无符号整数,保证大到足以在您的平台上保存指针。

位移零最低4位(因此为16的倍数)。