我正在Visual Studio 2015中编写一个配置文件编辑器,用于在Unity中编写的游戏。这意味着我的String.GetHashCode()
和游戏String.GetHashCode()
不一样。
我的想法是简单地找到游戏方法,然后使用它来获取我需要的任何字符串的哈希码。然而,事实证明这很困难。这是方法:
public unsafe int GetHashCode()
{
IntPtr arg_0F_0;
IntPtr expr_06 = arg_0F_0 = "test";
if (expr_06 != 0)
{
arg_0F_0 = (IntPtr)((int)expr_06 + 12);
}
char* ptr = arg_0F_0;
int num = 352654597;
int num2 = num;
int* ptr2 = (int*)ptr;
for (int i = this.Length; i > 0; i -= 4)
{
num = ((num << 5) + num + (num >> 27) ^ *ptr2);
if (i <= 2)
{
break;
}
num2 = ((num2 << 5) + num2 + (num2 >> 27) ^ ptr2[1]);
ptr2 += 2;
}
return num + num2 * 1566083941;
}
我将第4行从this
更改为"test"
,因此它不会抛出编译错误,无论如何它应该是一个字符串。但这不会编译,它给了我几个错误:
IntPtr expr_06 = arg_0F_0 = "test";
标有arg_0F_0 = "test"
无法转换来源类型&#39;字符串&#39;定位类型&#39; System.IntPtr&#39;
if (expr_06 != 0)
标有expr_06 != 0
运营商&#39;!=&#39;不能应用于类型&#39; System.IntPtr&#39;的操作数。和&#39; int&#39;
这也引发了错误char* ptr = arg_0F_0;
,但是当我使用此char* ptr = (char*) arg_0F_0;
更改错误时它就消失了。
那么,有什么想法吗?我如何使其工作?只要得到相同的结果,我就不在乎方法内部会发生什么。