工大人在上海
做为c++菜鸟也要嗷嗷飞!
   经过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大哥
posted on 2007-04-04 20:31  天下大事 必作于细  阅读(300)  评论(0编辑  收藏  举报