C#String.getHashCode()为不同的字符串返回相同的值[复制]
参见英文答案 >
string.GetHashCode() returns different values in debug vs release,how do I avoid this?????????????????????????????????????3个
>???????????? Calculate MD5 checksum for a file????????????????????????????????????6个 我的应用程序作为Windows服务运行,我将VS2013附加到它的调试过程.我正在获取图像文件内容的哈希码,以检查以下方法的差异(在静态类中): static class FileUtils { public static int GetFileHash(string filePath) { int hash = 0; Logger.WriteLog(ToolTipIcon.Info,"Calculating hash code for {0}",filePath); StreamReader sr = new StreamReader(filePath,Encoding.Unicode); hash = sr.ReadToEnd().GetHashCode(); sr.Close(); return hash; } } 这在生产中一直很好.但是,对于两个不同的图像,此方法将始终返回2074746262.我试图在winforms应用程序中使用相同的代码和图像重现这一点,我不能.是否存在调试VS2013中的进程会导致此行为的问题?我用一个完全不同的图像替换了其中一个图像,但它仍然会发生. 解决方法
首先,您应该知道您正在错误地使用GetHashCode,原因有两个:
>哈希码不是唯一的,只有非常好的分布.存在有限数量的哈希码和无限数量的二进制字符串,因此在物理上不可能为每个字符串生成唯一的哈希码. string.GetHashCode() returns different values in debug vs release,how do I avoid this? 话虽如此,三个不同的二进制字符串在相同的运行时环境中以不同的方式散列,这取决于是否附加了调试器,这似乎有点不同寻常.除了一般不信任GetHashCode之外,我的下一个猜测是你没有哈希你认为你正在哈希的东西.我会在对其进行散列之前将二进制数据本身转储到磁盘,并确认您确实拥有不同的二进制字符串. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |