经过pangwa大哥的指点,对于这个问题终于有点明白了。
其实__h = __h * 5 + *(__s++)只是一种实现string到long转换的方式而已。
在php中,就是用了一下方法转换string:
大家可以看到,在php中,使用的是一个移位算法来将一个字符串转为long型。
参考文章:http://blog.iyi.cn/tech/2005/11/post_2.html
感谢:pangwa大哥
其实__h = __h * 5 + *(__s++)只是一种实现string到long转换的方式而已。
在php中,就是用了一下方法转换string:
static unsigned long hashpjw(char *arKey, unsigned int nKeyLength) |
{ |
unsigned long h = 0, g; |
char *arEnd=arKey+nKeyLength; |
while (arKey < arEnd) { |
h = (h << 4) + *arKey++; |
if ((g = (h & 0xF0000000))) { |
h = h ^ (g >> 24); |
h = h ^ g; |
} |
} |
return h; |
} |
大家可以看到,在php中,使用的是一个移位算法来将一个字符串转为long型。
参考文章:http://blog.iyi.cn/tech/2005/11/post_2.html
感谢:pangwa大哥