我正在将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)(...)
或者什么?
答案 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);