gpt4 book ai didi

将 MD5 结果转换为 C 中的整数

转载 作者:行者123 更新时间:2023-12-04 05:41:43 26 4
gpt4 key购买 nike

我的目标是使用 MD5 结果的结果来索引哈希表。我想对其执行模运算以在表中找到合适的插槽。我尝试将其转换为 unsigned long long 类型。当我打印结果时,对于相同的 MD5 哈希,我每次都得到不同的数字。 MD5 哈希值最初是一个无符号字符 *。有人能告诉我我做错了什么吗?

这是我的功能:

int get_fp_slot(unsigned char * fingerprint, int size)
{
return (unsigned long long)fingerprint % size;
}

最佳答案

MD5 哈希是一个 128 位的数字。因此,为了获得最佳性能,您可能应该保留所有 128 位。

鉴于您的函数将 128 位哈希作为字符串,您需要将该字符串解析为一系列 4 个整数。您的字符串可能如下所示:

79054025255fb1a26e4bc422aef54eb4

那是一个 32 字节的十六进制字符串。如果是这样,您可以像这样提取二进制版本:
int v1, v2, v3, v4;
sscanf( &fingerprint[0], "%x", &v1 );
sscanf( &fingerprint[8], "%x", &v2 );
sscanf( &fingerprint[16], "%x", &v3 );
sscanf( &fingerprint[24], "%x", &v4 );

你现在做什么实际上取决于你希望你的哈希有多好。如果您确实需要使用 32 位数字,那么只需将所有这些数字异或:
int hash = v1 ^ v2 ^ v3 ^v4;

关于将 MD5 结果转换为 C 中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com