如何进行反向memcmp?
如何进行反向内存比较?例如,我给出两个序列的结尾,并且我希望指针向开头递减,而不是向结尾递增。
How can I do reverse memory comparison? As in, I give the ends of two sequences and I want the pointer to be decremented towards the beginning, not incremented towards the end.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
C 标准库中没有内置函数可以执行此操作。这里有一个简单的方法来实现你自己的:
如果你想要高性能,你应该一次比较 4 字节的字而不是单个字节,因为内存延迟将成为瓶颈;然而,该解决方案要复杂得多,而且并不值得。
There's no built-in function in the C standard library to do it. Here's a simple way to roll your own:
If you something high-performance, you should compare 4-byte words at a time instead of individual bytes, since memory latency will be the bottleneck; however, that solution is significantly more complex and not really worth it.
就像 Vlad Lazarenko 最初链接的一篇文章(C memcpy inverse)一样,这里有一个基于此的解决方案,我尚未测试,但应该可以帮助您开始。
Much like in a post (C memcpy in reverse) originally linked by Vlad Lazarenko, here is a solution based on that, that I haven't yet tested but should get you started.
您所需要做的就是指定两端和要比较的大小以及步长。请特别注意,步长可能是获得预期结果的最重要部分。如果限制大小,将大大简化实施。对于 char 的大小,您可以执行以下操作:
All you need to do is specify your two ends and the size that you'd like to compare, as well as a step size. Please note especially that the step size may be the most important part for getting the expected results. It will greatly ease the implementation if you restrict the sizes. For the size of a char you could do something like:
更短的代码(C 代码不需要强制指针类型转换):
shorter code (C code doesn't need force pointer type cast):