我查看了很多有关“PHP整数溢出”的问题,但没有找到能回答我的具体问题的答案,所以我希望我没有错过现有的答案。
我想在PHP中使用djb2哈希函数将键哈希为类似于分片标识符(SimpleDB的域索引)的东西。它会溢出无符号长整数,因此我无法在纯PHP中完全相同地执行它,因为PHP的本机整数是32位有符号的。
因此,我尝试了PHP的bc和libgmp数学扩展,它们允许任意长度,并解决了符号/比例问题,但它们使整数“太大”-即它们不会溢出。
特别是使用GMP可以正常工作并似乎给出一致的结果,但显然比C慢一个数量级(0m0.017s与0m0.002s)。我不知道这是否仅仅是因为它是PHP vs C,还是如果我能让它溢出,那么它在PHP中会显着更快。我宁愿测试并找出,但我找不到让它发生的方法。
那么,在PHP中是否有任何方法可以强制ULONG最大值?也许我需要在PHP扩展中包装C函数吗?或者,考虑到我计划仅哈希短键(可能为64个字符或更少),那么这会提供严重递减的回报吗?
我想在PHP中使用djb2哈希函数将键哈希为类似于分片标识符(SimpleDB的域索引)的东西。它会溢出无符号长整数,因此我无法在纯PHP中完全相同地执行它,因为PHP的本机整数是32位有符号的。
因此,我尝试了PHP的bc和libgmp数学扩展,它们允许任意长度,并解决了符号/比例问题,但它们使整数“太大”-即它们不会溢出。
特别是使用GMP可以正常工作并似乎给出一致的结果,但显然比C慢一个数量级(0m0.017s与0m0.002s)。我不知道这是否仅仅是因为它是PHP vs C,还是如果我能让它溢出,那么它在PHP中会显着更快。我宁愿测试并找出,但我找不到让它发生的方法。
那么,在PHP中是否有任何方法可以强制ULONG最大值?也许我需要在PHP扩展中包装C函数吗?或者,考虑到我计划仅哈希短键(可能为64个字符或更少),那么这会提供严重递减的回报吗?