我希望将我发现的一些旧代码转换为符合.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
}
答案 0 :(得分:0)
将uint转换为: uint num = 0xEEEEEEEE;
这解决了这个问题。感谢@zzxyz的提示和方法!