gpt4 book ai didi

c - atol 对不同的字符串产生相同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:59 28 4
gpt4 key购买 nike

正如 this 的评论中所建议的那样问题,我将其用作哈希函数:

atol(phone) % buckets

但是,对于我所有的电话号码,我从 atol() 得到了完全相同的结果!我删除了前两位数字(在我的案例中,它们对于所有数字都是相同的)并得到了不同的结果(当然检测到了碰撞......)。

为什么会这样?

检查此输出:

printf("%s %ld %ld %s %ld %d %ld\n", str, atol(str), atol(str) % N,
phone, atol(phone), N, atol(phone) % N);

只是一些例子:

48614858 48614858 58 6948614858 2147483647 200 47
61468264 61468264 64 6961468264 2147483647 200 47
54079694 54079694 94 6954079694 2147483647 200 47
48370923 48370923 123 6948370923 2147483647 200 47
52746354 52746354 154 6952746354 2147483647 200 47

元问题:如果可以建议更好的方法来获得更好的哈希函数,我仍然愿意更改我的代码。

编辑:

strtol() 给出相同的结果。

最佳答案

那是因为提供的电话号码太大,不能用整数表示,所以atol()不能很好的转换字符串,调用后请检查errno atol() 确保转换过程中没有错误发生。
这种情况下,你可以尝试使用函数atoll() 来转换电话号码,函数atoll() 可以容纳一个 long long 整数。

关于c - atol 对不同的字符串产生相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407831/

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