编程浪子的博客

碌碌无为终为过

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

前几天碰到一个问题是这样的:我在博问里边提了下:

问题地址是:http://space.cnblogs.com/question/12395/

在x86的PC上对于一个字符串使用GetHashCode()获取一个字符串的Hash

(在PC上试验了WinForm和Asp.Net,结果是一样的)

在Xscale CPU的WinCE上边对于同样的字符串也使用GetHashCode()获取Hash

(在WinCE设备上和PPC2003、WM5、WM6模拟器的模拟器上结果都相同)

然后比较发现他们俩不一样!这是为什么呢?

刚才Google了一下,有说对于同样一个对象X86和X64平台下GetHashCode()的结果是不一样的。

为什么不一样没说。

Google使用关键字GetHashCode CPU 结果令人失望!

 

今天又想起来这个问题。于是用Reflector察看了一下System.String.GetHashCode(); 恍然大悟。

GetHashCode()代码如下:

 

MSDN上说fixed是不支持CF的.所以CF下肯定用了别的函数。CF的mscorelib.dll反编译回来只有函声明,没有实现,没法比较。

还用到了指针,在.Net下变我都没用过指针呢! 感觉就是一些字符变换的东西! 使用指针就跟CPU架构有关

CF的反编译回来什么都没有.没法比较!

总的感觉是:

1、GetHashCode() 跟.NET环境有关,因为函数可能不同...

2、跟CPU架构有关,因为不同CPU中

int num = 0x15051505;

int 型的溢出值

int* numPtr  指针的地址范围

尤其是移位操作num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1]; 的结果都是不一样的!

 


posted on 2010-02-26 22:35  编程浪子_  阅读(420)  评论(0编辑  收藏  举报