【发布时间】:2011-09-06 07:17:26
【问题描述】:
我正在将 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)(...)
还是什么?
【问题讨论】:
-
v4的类型相关,请提供。 -
为什么不使用 BitConvert.ToUint64?
-
v4 是 int.. 只是一个指针扫描器,将什么转换为 UInt64?
-
相信我
*(_DWORD *)(v4 + XX)废话由BitConverter.ToInt32(v4, XX)处理得非常好.. 我已经用其他sn-ps 测试过这个.. 但这个真的让我很难过。与 xor.. 和 ulong -
使用
BitConvert.ToUInt32而不是ToInt32会丢失一些演员表。忠实的转换应该是这样的:(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);