C#如何用XOR(^)表示(unsigned long)(unsigned int)(ulong)(uint)

时间:2011-09-06 07:17:26

标签: c# xor uint ulong

我正在将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)(...)

或者什么?

1 个答案:

答案 0 :(得分:0)

使用BitConvert.ToUInt32(对应于Win32 C ++编程中的DWORD类型)而不是ToInt32(通常为int),这可以帮助您丢失一些演员表并修复一些类型问题。

忠实的转换应该类似于以下内容,尽管我认为没有必要将中间转换为ulong(因为当我们执行mod 9时,32个最重要的位被忽略而且我认为他们总是最终为0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);