0

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)(...)

または何?

4

1 に答える 1

0

(通常は) の代わりに (Win32 C++ プログラミングBitConvert.ToUInt32の型に対応する) を使用すると、キャストの一部が失われ、型の問題の一部が修正されます。DWORDToInt32int

忠実な変換は次のようなものでなければなりませんが、中間にキャストする必要はないと思いますulong(とにかく mod 9 を実行すると最上位 32 ビットが無視され、常に次のようになると思います)。 0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
于 2011-09-06T07:56:25.683 に答える