我如何比较2个unsigned char数组?

时间:2015-05-10 00:07:53

标签: c hash

我有一台服务器计算图像的哈希并将图像和哈希发送到客户端。我让客户端计算它接收的图像的哈希值。这是基本设置:

SERVER

unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(tdata, sum);
w = write(newsockfd,sum,MD5_DIGEST_LENGTH);

客户端

unsigned char ssum[MD5_DIGEST_LENGTH];
w = read(sockfd,ssum,MD5_DIGEST_LENGTH);
unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(imgpath, sum);
int j;
for (j = 0; j < MD5_DIGEST_LENGTH; j++)
    printf("%02x", ssum[j]);
printf("\n");
printf("CLIENT CHECKSUM: ", sum);
    for (j = 0; j < MD5_DIGEST_LENGTH; j++)
        printf("%02x", sum[j]);
printf("\n");

输出完全相同,但如何使用if语句检查它们的相等性?如果我这样做:

if (sum == ssum)

它总是评估为假。

2 个答案:

答案 0 :(得分:9)

使用memcmp

  

memcmp()函数应比较前n个字节(每个字节)   解释为s1指向的对象的unsigned char)   s2指向的对象的前n个字节。

     

非零返回值的符号应由符号确定   第一对字节的值之间的差异(两者都有)   解释为类型unsigned char)在对象中不同   比较。

答案 1 :(得分:5)

sumssum是数组,这意味着他们将指针指向一块内存,因此当您编写if (sum == ssum)时,您和#39;重新比较两个指针。这就是为什么显然你的输出总是假的,因为指向不同内存块的指针可能是相同的。

因此,您需要按其元素比较两个数组。您可以使用memcmp

bool isEqual = (memcmp(sum, ssum, MAX_DIGEST_LENGTH) == 0);