我需要将该代码反向工程为C#,并且输出绝对相同是至关重要的。关于ord函数和“垃圾箱%(1 def easyHash(s): """ MDSD used the following hash algorithm to cal a first part of partition key """ strHash = 0 multiplier = 37 for c in s: strHash = strHash * multiplier + ord(c) #Only keep the last 64bit, since the mod base is 100 strHash = strHash % (1<<64) return strHash % 100 #Assume eventVolume is Large (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 大概是这样的:请注意,我使用的是ulong而不是long,因为我不希望溢出后出现负数(它们会使计算混乱)。我不需要执行strHash = strHash % (1<<64),因为对于ulong,它是隐式的。public static int EasyHash(string s){ ulong strHash = 0; const int multiplier = 37; for (int i = 0; i < s.Length; i++) { unchecked { strHash = (strHash * multiplier) + s[i]; } } return (int)(strHash % 100);}通常不需要使用unchecked关键字,因为“通常” C#是在unchecked模式下编译的(因此无需检查是否溢出),但是代码可以在checked模式下编译(有一个选项)。按照编写的方式,此代码需要unchecked模式(因为它可能有溢出),因此我用unchecked关键字对其进行了强制。Python:https://ideone.com/RtNsh7C#:https://ideone.com/0U2Uyd (adsbygoogle = window.adsbygoogle || []).push({});
09-30 23:55