如何将这个Python代码转换为C#?

时间:2015-07-17 13:54:48

标签: c# python

我需要将此代码反向工程为C#,并且输出绝对相同至关重要。关于ord函数和“strHash%(1<< 64)”部分的任何建议?

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

1 个答案:

答案 0 :(得分:4)

可能是这样的:

请注意,我使用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关键字通常不是必需的,因为&#34;通常&#34; C#以unchecked模式编译(因此不检查溢出),但代码可以在checked模式下编译(有一个选项)。编写的代码需要unchecked模式(因为它可能有溢出),因此我强制使用unchecked关键字。

Python:https://ideone.com/RtNsh7

C#:https://ideone.com/0U2Uyd