C# wie man (nicht signiert lang) (unsigned int) (ulong) (uint) mit XOR (^) darstellt

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

  •  26-10-2019
  •  | 
  •  

Frage

Ich konvertiere C ++ - Code in C#

Sagen Sie, ich habe das in C ++ bekommen

int v5;
v5 = (*(_DWORD *)(v4 + 68) ^ (unsigned __int64)(unsigned int)(*(_DWORD *)(v4 + 56) ^ *(_DWORD *)(v4 + 20))) % 9;

In C# wäre es wie ..

   int v5;
   v5 = (int)((BitConverter.ToInt32(v4, 68) ^ (ulong)(uint)(BitConverter.ToInt32(v4, 56) ^ BitConverter.ToInt32(v4, 20))) % 9);

Aber ich bekomme Fehler .. mit dem (ulong) , (uint)

Operator '^' kann nicht auf Operanden vom Typ 'int' und 'ulong' angewendet werden

Soll ich tun

(int)(ulong)(uint)(...)

oder was?

War es hilfreich?

Lösung

Verwenden BitConvert.ToUInt32 (entspricht dem DWORD Geben Sie von Win32 C ++ programmieren) statt ab ToInt32 (Normalerweise an int), Dies sollte Ihnen helfen, einige der Abgüsse zu verlieren und einige der Typprobleme zu beheben.

Eine treue Bekehrung sollte so etwas wie das Folgende sein, obwohl ich nicht denke, dass es notwendig ist, die Zwischenbesetzung zu haben ulong (Da die 32 bedeutendsten Bits sowieso ignoriert werden, wenn wir den Mod 9 machen, und ich denke, sie werden immer mit 0 enden):):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top