c#表現方法(unsigned long)(unsigned int)(ulong)(uint)with xor(^)

StackOverflow https://stackoverflow.com/questions/7316234

  •  26-10-2019
  •  | 
  •  

質問

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top