考虑到C溢出,如何在Python中使用64位无符号整数数学?
发布时间:2020-05-24 22:29:32 所属栏目:Python 来源:互联网
导读:我正在尝试在Python中实现djb2哈希.它在C中:/* djb2 hash http://www.cse.yorku.ca/~oz/hash.html */ uint64_t djb2(size_t len, char const str[len]) { uint64_t hash = 5381; uint8_t c; for(
|
我正在尝试在Python中实现djb2哈希. 它在C中:
这是我在Python中的尝试:
但是,我在两者之间得到了不同的结果,我怀疑是由于不同的溢出行为或其他数学上的差异. 在python版本中屏蔽的原因是试图强制溢出(基于this answer). 最佳答案 您可以在纯Python中轻松实现由C代码运行的算法,而无需任何ctypes东西.只需使用常规的Python整数完成所有操作,然后在最后取一个模数(高位不会影响正在执行的操作的低位):
正如我在代码中评论的那样,由于这是对字节串定义的操作,因此应使用字节实例作为参数.请注意,此算法有很多不同的实现.有些人使用^(按位异或)而不是在更新哈希值的步骤中使用,并且通常将其定义为使用无符号长型,通常为32位,而不是问题中C版本使用的显式64位整数. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
