从字符串到long int的转换returns不同字符串的相同值
Conversion from string to long int returns same value for different strings
我一直在尝试将 char* 类型的 c 字符串转换为长整数,以便将转换后的数字用作散列函数的键值。我尝试了 atol 和 strtol 函数,每次我用不同的 string.The 调用函数时,对我来说都是 return 相同的哈希值,下面是我的哈希函数。
int h_function(char* key,h_table* table){
int i;
char* key_i=key;
char str[14];
char code[4];
char number[11];
long result;
//printf("%c\n",key_i[13]);
//there is a "-" in key[3] so i want to remove that first
for(i=0;i<3;i++){
code[i]=key_i[i];
}
code[3]='[=11=]';
printf("This is the code: %s\n",code);
for(i=0;i<10;i++){
number[i]=key_i[i+4];
}
number[10]='[=11=]';
printf("This is the number: %s\n",number);
strcpy(str,code);
strcat(str,number);
printf("This is the full key number: %s\n",str);
//converting to long int
result=atol(str);
printf("This is the key converted to an integer: %ld\n",result);
int hash_value=(result % table->size);
printf("The hashvalue is: %d\n",hash_value);
return hash_value;
}
这是我得到的输出:
This is the code: 357
This is the number: 5472318696
This is the full key number: 3575472318696
This is the key converted to an integer: 2147483647
The hashvalue is: 22
This is the hashed index: 22
即使完整的密钥编号根据我作为参数传递的 char* 密钥而变化,转换后的整数和散列值保持不变。
我将不胜感激任何帮助...提前致谢。
那是因为 3575472318696 不适合 int
或 long
(我假设您的实现是 32 位)。
它看起来像 returns 这种情况下的最大 long 值,2^31 - 1 = 2147483647。
我一直在尝试将 char* 类型的 c 字符串转换为长整数,以便将转换后的数字用作散列函数的键值。我尝试了 atol 和 strtol 函数,每次我用不同的 string.The 调用函数时,对我来说都是 return 相同的哈希值,下面是我的哈希函数。
int h_function(char* key,h_table* table){
int i;
char* key_i=key;
char str[14];
char code[4];
char number[11];
long result;
//printf("%c\n",key_i[13]);
//there is a "-" in key[3] so i want to remove that first
for(i=0;i<3;i++){
code[i]=key_i[i];
}
code[3]='[=11=]';
printf("This is the code: %s\n",code);
for(i=0;i<10;i++){
number[i]=key_i[i+4];
}
number[10]='[=11=]';
printf("This is the number: %s\n",number);
strcpy(str,code);
strcat(str,number);
printf("This is the full key number: %s\n",str);
//converting to long int
result=atol(str);
printf("This is the key converted to an integer: %ld\n",result);
int hash_value=(result % table->size);
printf("The hashvalue is: %d\n",hash_value);
return hash_value;
}
这是我得到的输出:
This is the code: 357
This is the number: 5472318696
This is the full key number: 3575472318696
This is the key converted to an integer: 2147483647
The hashvalue is: 22
This is the hashed index: 22
即使完整的密钥编号根据我作为参数传递的 char* 密钥而变化,转换后的整数和散列值保持不变。 我将不胜感激任何帮助...提前致谢。
那是因为 3575472318696 不适合 int
或 long
(我假设您的实现是 32 位)。
它看起来像 returns 这种情况下的最大 long 值,2^31 - 1 = 2147483647。