否定无法转换为uint

时间:2018-01-10 18:14:48

标签: c# .net-core unsafe .net-standard uint

我希望将我发现的一些旧代码转换为符合.net标准的版本。但是我之前没有使用这样的代码,所以我对如何使用它有点迷失,因为它没有编译。

我知道uint不能否定,但这段代码过去是如何工作的?

public static uint Hash(string str, HashType hashType)
    {
        unsafe
        {
            uint cryptTable = 2146271213;
            uint num = -286331154;
            string upperInvariant = str.ToUpperInvariant();
            for (int i = 0; i < upperInvariant.get_Length(); i++)
            {
                uint num1 = (byte)upperInvariant[i];
                cryptTable = Crypto.CryptTable[&((uint)hashType * 256 + num1)] ^ cryptTable + num;
                num = num1 + cryptTable + num + (num << 5) + 3;
            }
            return cryptTable;
        }
    }

public enum HashType : uint
{
    FileHashTableIndex,
    FilePathA,
    FilePathB,
    TableKey
}

1 个答案:

答案 0 :(得分:0)

将uint转换为: uint num = 0xEEEEEEEE;

这解决了这个问题。感谢@zzxyz的提示和方法!