2011-09-06 57 views
1

我将C++代码转换为C#C#如何代表(无符号长)(unsigned int类型)(ULONG)(UINT)与

XOR(^)说我得到了这个在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)

操作 '^' 不能应用于类型 '诠释' 和操作数的ULONG“

我应该做的

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

还是什么?

+0

“v4”的类型是相关的,请提供它。 – Jon

+0

为什么不使用BitConvert.ToUint64? – Bas

+0

v4是int ..只是一个指针扫描器,将什么转换为UInt64? – SSpoke

回答

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); 
相关问题