我在C中写了一个hexdump函数。
如何将给定地址(void * start)截断为16的最大倍数,小于给定的起始参数? 有一个简单的方法吗? 感谢
答案 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的倍数)。