c - 如何做反向memcmp?

标签 c memcmp

如何进行逆向内存比较?例如,我给出了两个序列的结尾,我希望指针在开始时递减,而不是在结束时递增。

最佳答案

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/

相关文章:

读内存会不会出现segmentation fault?

c# - 如何在字节 [] 的两个部分(带偏移量)上调用 memcmp()?

c - 华氏度到摄氏度程序改进和选择输出

c - 使用 64 位无符号变量中的不同值更新每个 block (4 位)?

c - 获取结构体调用函数的指针

c - 为什么初始数组元素的地址比较相等?

c - 将 SSE2 和 AVX 内在函数与不同的编译器混合

c - 错误: Syntax error before 'struct'

c - 为什么 memcmp 返回 -1 虽然相等