前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >64位进程池HashCode兼容处理

64位进程池HashCode兼容处理

作者头像
蘑菇先生
发布2018-05-21 17:27:25
6700
发布2018-05-21 17:27:25
举报

背景

net旧项目使用32位生成的HashCode,存储到数据库中。迁移到64位上,就需要对HashCode做兼容处理。

解决方案

1:进程池配置支持32位程序。

2:对Hashcode做兼容处理,【推荐】。

兼容实现

代码语言:javascript
复制
 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;
            }
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档