c#表現方法(unsigned long)(unsigned int)(ulong)(uint)with xor(^)
質問
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)(...)
または何?
解決
使用する BitConvert.ToUInt32
(に対応します DWORD
ではなく、win32 c ++プログラミングから入力します ToInt32
(通常は int
)、それはあなたがいくつかのキャストを失い、いくつかのタイプの問題を修正するのに役立つはずです。
忠実な回心は次のようなものでなければなりませんが、中間のキャストを持つ必要はないと思います。 ulong
(とにかくMOD 9を実行すると、32の最も重要なビットは無視されているため、常に0になると思います):
(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
所属していません StackOverflow