前几天碰到一个问题是这样的:我在博问里边提了下:
问题地址是: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]; 的结果都是不一样的!