0

我正在将 C++ 代码转换为 C#

假设我在 C++ 中得到了这个

int v5;
v5 = (*(_DWORD *)(v4 + 68) ^ (unsigned __int64)(unsigned int)(*(_DWORD *)(v4 + 56) ^ *(_DWORD *)(v4 + 20))) % 9;

在 C# 中它会像..

   int v5;
   v5 = (int)((BitConverter.ToInt32(v4, 68) ^ (ulong)(uint)(BitConverter.ToInt32(v4, 56) ^ BitConverter.ToInt32(v4, 20))) % 9);

但我得到错误.. (ulong),(uint)

运算符“^”不能应用于“int”和“ulong”类型的操作数

我应该做

(int)(ulong)(uint)(...)

要不然是啥?

4

1 回答 1

0

使用BitConvert.ToUInt32(对应于DWORDWin32 C++ 编程中的类型) 而不是ToInt32(通常是int),这应该可以帮助您丢失一些强制转换并修复一些类型问题。

忠实的转换应该类似于以下内容,尽管我认为没有必要将中间转换为ulong(因为无论如何在我们执行 mod 9 时会忽略 32 个最高有效位,我认为它们最终将始终为0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
于 2011-09-06T07:56:25.683 回答