【问题标题】:C# How to represent (unsigned long)(unsigned int) (ulong)(uint) with XOR (^)C# 如何用 XOR (^) 表示 (unsigned long)(unsigned int) (ulong)(uint)
【发布时间】: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);

标签: c# xor uint ulong


【解决方案1】:

使用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);

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多