C Progma说散列是不同的,但它不是

C Progma说散列是不同的,但它不是,c,C,我有一个程序,从一个文件生成一个散列键,并显示该散列。我正在尝试检查结果哈希键是否与预期的哈希键对应。但这不起作用,因为当散列键与预期值相同时,我会收到消息说“散列不同”。你看到什么不正确了吗 与问题相关的一些变量 BYTE rgbFile[BUFSIZE]; DWORD cbRead = 0; BYTE rgbHash[MD5LEN]; DWORD cbHash = 0; CHAR rgbDigits[] = "0123456789abcdef";

我有一个程序,从一个文件生成一个散列键,并显示该散列。我正在尝试检查结果哈希键是否与预期的哈希键对应。但这不起作用,因为当散列键与预期值相同时,我会收到消息说“散列不同”。你看到什么不正确了吗

与问题相关的一些变量

    BYTE rgbFile[BUFSIZE];
    DWORD cbRead = 0;
    BYTE rgbHash[MD5LEN];
    DWORD cbHash = 0;
    CHAR rgbDigits[] = "0123456789abcdef";
    PCSTR filename = "c:\\Users\\jax\\Desktop\\files\\test.txt";
    CHAR hashExpected[] = "4ab5d20e55ef73e4f412d73c2a201e";
在下面的代码中,它显示了一条类似“文件哈希为”4ab5d20e55ef73e4f412d73c2a201e”的消息,我在其中进行了比较:

        DWORD i;
        CHAR hashResult= "";
        printf("Hash of file %s is: ", filename);
        for (i = 0; i < cbHash; i++)
        {
            printf("%c%c",
                   rgbDigits[rgbHash[i] >> 4],
                   rgbDigits[rgbHash[i] & 0xf]);
            hashResult = rgbDigits[rgbHash[i] >> 4];
            hashResult += rgbDigits[rgbHash[i] & 0xf];

        }

        printf("\n");    
        printf(hashResult);
        if(hashResult == hashExpected){
            printf("hash is the same");
        }
        else{
            printf("hash is different");
        }

您在类型方面存在一些重大问题,至少在比较中是这样

if(hashResult == hashExpected){
hashResult
是一个
CHAR
hashExpected
(没有数组索引)是内存中
CHAR
数组开始的地址。您需要比较存储在该数组中的实际值,而不仅仅是它所在位置的地址


编辑:我注意到
hashResult
是一个
CHAR
,而不是之前编写的数组。无论哪种方式,
hashResult==hashExpected
比较都是不合适的。

您显示的代码不应该在没有警告的情况下编译。您既有
CHAR a[]=“…”;
又有
CHAR b=”";。您无法将字符串与
==
进行相等比较,但确实可以。请考虑如何比较两个数组:元素对元素。只有当所有对应元素相等时,两个数组的值才相等。您不能只进行一次比较,然后立即知道“哈希是相同的”
,您必须等待,直到您知道所有哈希都是相同的。如果您发现一个元素不匹配,那么您会立即知道它们不相等。再次感谢您的回答。据我所知,在您的帮助下,我现在更新的代码应该可以工作,因为如果它发现两个字母不同,则返回false,如果都是icual,则返回true。但是我总是收到“散列不同”的信息,它们是相互关联的。谢谢你的回答。据我所知,问题在于hashResult存储时没有数组索引。现在我这样做了,但是结果是一样的,消息说“Hash是different”。您仍然在if语句中比较地址,而您必须比较数组中的值,如
if(hashResult[i]==hashExpected[i]){
遍历数组时。如果字符数组是
\0
终止,则使用字符串比较函数感谢您的帮助。我认为现在应该可以了,因为我遍历数组并检查每个元素是否相互关联。但它总是显示“哈希相同”即使我把散列改成另一个。
BOOL test( char array1[] , char array2[] )
{
    int i;
    for( i = 0; array1[i] && array2[i]; ++i )
    {
        if( array1[i] != array2[i] )
        {
            return( FALSE );
        }
    }
    return( TRUE );
}
if(hashResult == hashExpected){