64位进程池HashCode兼容处理
背景
net旧项目使用32位生成的HashCode,存储到数据库中。迁移到64位上,就需要对HashCode做兼容处理。
解决方案
1:进程池配置支持32位程序。
2:对Hashcode做兼容处理,【推荐】。
兼容实现
static void Main(string[] args) { string test = "hello"; //-327419862 64位下 //-695839 32位下 int bit = test.GetHashCode(); int hashCode = CompatibleHash("hello"); } /// <summary> /// 64位环境下,生成兼容32位的hashCode。 /// </summary> /// <param name="str"></param> /// <returns></returns> public static unsafe int CompatibleHash(string str) { fixed (char* charPtr = new String(str.ToCharArray())) { int hashCode = (5381 << 16) + 5381; int numeric = hashCode; int* intPtr = (int*)charPtr; for (int i = str.Length; i > 0; i -= 4) { hashCode = ((hashCode << 5) + hashCode + (hashCode >> 27)) ^ intPtr[0]; if (i <= 2) break; numeric = ((numeric << 5) + numeric + (numeric >> 27)) ^ intPtr[1]; intPtr += 2; } return hashCode + numeric * 1566083941; } }
作者:蘑菇先生
出处: http://mushroom.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载。未经作者同意下,必须在文章页面明显标出原文链接及作者,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!
如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!