时间:2021-05-26
前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下:
复制代码 代码如下:
function _getHash($username)
{
$hash = crc32($username) % 512;
return $hash;
}
function _getTable($username)
{
$hash = self::_getHash($username);
return 'user_' . $hash;
}
首先在本地32位window机上生成好数据并插入对应的表中。但是再把程序和数据传到服务器上(64为linux),发现查不到数据。经过排查后发现,原来服务器上crc32的结果和本地不同。再查php手册才知,crc32的接口原来和机器有关。
php手册的描述:
复制代码 代码如下:
Because PHP's integer type is signed many crc32 checksums will result in negative integers on 32bit platforms. On 64bit installations all crc32() results will be positive integers though.
crc32返回的结果在32位机上会产生溢出,所以结果可能为负数。而在64位机上不会溢出,所以总是正值。
CRC算法是按字长位数bit进行计算的。
crc32函数会按照php中的两个常量参考计算 PHP_INT_SIZE,PHP_INT_MAX
这两个常量的定义:
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。PHP 不支持无符号整数。Integer值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX来表示。
输出下32位中PHP_INT_SIZE:4,PHP_INT_MAX:2147483647
输出下64位中PHP_INT_SIZE:8,PHP_INT_MAX:9223372036854775807
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
PHPcrc32()函数实例输出crc32()的结果:定义和用法crc32()函数计算一个字符串的32位CRC(循环冗余校验)。该函数可用于验证数据的完整性。提
本文实例讲述了python求crc32值的方法。分享给大家供大家参考。具体实现方法如下:要想求CRC值,前面要importbinasciibinascii.cr
php生成短网址原理:1.将原网址做crc32校验,得到校验码。2.使用sprintf('%u')将校验码转为无符号数字。3.对无符号数字进行求余62操作(大小
复制代码代码如下://分库分表算法functioncalc_hash_db($u,$s=4){$h=sprintf("%u",crc32($u));$h1=in
free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。注意:free函数与malloc()函数配对使用,释放malloc函