如何进行逆向内存比较?例如,我给出了两个序列的结尾,我希望指针在开始时递减,而不是在结束时递增。
最佳答案
C 标准库中没有内置函数可以执行此操作。这是一个简单的方法来滚动你自己的:
int memrcmp(const void *s1, const void *s2, size_t n)
{
if(n == 0)
return 0;
// Grab pointers to the end and walk backwards
const unsigned char *p1 = (const unsigned char*)s1 + n - 1;
const unsigned char *p2 = (const unsigned char*)s2 + n - 1;
while(n > 0)
{
// If the current characters differ, return an appropriately signed
// value; otherwise, keep searching backwards
if(*p1 != *p2)
return *p1 - *p2;
p1--;
p2--;
n--;
}
return 0;
}
如果您需要高性能,您应该一次比较 4 个字节的字而不是单个字节,因为内存延迟将成为瓶颈;然而,该解决方案要复杂得多,并不值得。
关于c - 如何做反向memcmp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406148/