如何进行反向内存比较?像这样,我给出了两个序列的结尾,我希望指针朝着开头递减,而不是朝结尾递增。

有帮助吗?

解决方案

C标准库中没有内置函数可以执行此操作。这是滚动自己的简单方法: 通用标签

如果您具有高性能,则应该一次比较4字节字而不是单个字节,因为内存延迟将成为瓶颈;但是,该解决方案要复杂得多,并不值得。

其他提示

很像最初由弗拉德·拉扎连科(Vlad Lazarenko)链接的帖子( C反向mcpep ),这是基于此的解决方案,我尚未测试过,但应该可以让您入门。 通用标签

您需要做的就是指定两端,要比较的大小以及步长。请特别注意,步长可能是获得预期结果的最重要部分。如果您限制大小,它将大大简化实施。对于char的大小,您可以执行以下操作: 通用标签

较短的代码(C代码不需要强制指针类型演员):

int reverse_memcmp(const void *end1, const void *end2, size_t n) {
    const unsigned char *a = end1, *b = end2;
    for (; n; --n)
        if (*--a != *--b) return *a - *b;
    return 0;
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top