c - mem 比较数组以获取匹配字节数

标签 c memory memcmp

int a[10];
int b[10];
memcmp(a, b, sizeof(int) * 10);

memcmp() 只告诉我们哪个内存块更大/更小,因为它只返回 -1,0,+1。 有没有一种方法可以知道 a[]b[] 中匹配元素的数量,然后才发生不匹配。

Ex: a = {1, 2, 3, 4, 5, 6}
    b = {1, 2, 4}

此处 memcmp(a, b, sizeof(int)* 3) 将返回 -1。我想得到 2 作为答案 有没有办法在 memcmp 或一些类似的内置函数的帮助下获得匹配元素的数量

最佳答案

我假设您想要一个低级别的答案,因为您一定已经拒绝了使用循环的简单方法。

您可以将内存块 a[0] 到 a[9] 与 b[0] 到 b[9] 进行异或。当且仅当原始数组相等时,生成的内存将是一 block 零。要获得匹配元素的数量,请计算全零位的 int block 的数量。

您可以在汇编程序中非常快速地执行此操作,因为操作非常简单。

关于c - mem 比较数组以获取匹配字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16712364/

相关文章:

c - 是否调用 shmget 或 shmat 初始化数据?

使用 memcmp() 和指针算法比较 C 中的结构

c - union 体中的 char 字节是否颠倒?

c++ - Scilab 编译 "cannot allocate this quantity of memory"

c - 这是与子进程共享只读内存的安全方法吗?

java - 当不再需要时,JVM 是否会将空闲内存返还给操作系统?

c - 特定代码的输出不正确。 (最大、最小、等级_扫描仪)

c++ - 覆盖动态分配的内存-C++

读内存会不会出现segmentation fault?

c++ - 比较 sha1 哈希是否相等的最佳方法