当我在32位PHP系统(crc32
为4)上进行PHP_INT_SIZE
调用时,得到的整数值可以是负数。无论我是在32位还是64位系统上,如何从数字中获取正确的模数值?
function checksumChar($str) {
if(PHP_INT_SIZE > 4) {
return crc32($str) % 26;
} else {
// ???
}
}
答案 0 :(得分:1)
如果结果为负,则添加22.(22为2 32 mod 26.)如果它仍然为负,则添加26.无论整数大小如何,这都将起作用。如果整数大小为64,则结果永远不会为负。
答案 1 :(得分:0)
一种可能的解决方案是生成十六进制值,将十六进制值转换为十进制浮点数并使用fmod
。
function checksumChar($str) {
if(PHP_INT_SIZE > 4) {
return crc32($str) % 26;
} else {
$hexCRC = (hash('crc32', $str);
$floatCRC = (float) base_convert($hexCRC, 16, 10);
return (int) fmod($floatCRC, 26);
}
}
它很难看,但似乎有效。我希望有更好的方法......