C# wie man (nicht signiert lang) (unsigned int) (ulong) (uint) mit XOR (^) darstellt
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?
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);