C # Comment représenter (unsigned long) (unsigned int) (ulong) (uint) avec XOR (^)
Question
Je convertir le code C à C #
Dites que je suis arrivé ce en C ++
int v5;
v5 = (*(_DWORD *)(v4 + 68) ^ (unsigned __int64)(unsigned int)(*(_DWORD *)(v4 + 56) ^ *(_DWORD *)(v4 + 20))) % 9;
Dans C # ce serait ..
int v5;
v5 = (int)((BitConverter.ToInt32(v4, 68) ^ (ulong)(uint)(BitConverter.ToInt32(v4, 56) ^ BitConverter.ToInt32(v4, 20))) % 9);
Mais je reçois des erreurs .. avec le (ulong)
, (uint)
Opérateur '^' ne peut pas être appliqué aux opérandes de type 'int' et 'ulong'
dois-je faire
(int)(ulong)(uint)(...)
ou quoi?
La solution
Utilisez BitConvert.ToUInt32
(correspond au type de DWORD
de Win32 C ++ programmation) au lieu de ToInt32
(normalement un int
), qui devrait vous aider à perdre quelques-uns des moulages et corriger certains des problèmes de type.
Une conversion fidèle doit être quelque chose comme ce qui suit, bien que je ne pense pas qu'il est nécessaire d'avoir la distribution intermédiaire ulong
(Depuis les 32 bits les plus significatifs sont ignorés lorsque nous faisons le mod 9 de toute façon et je pense qu'ils finissent toujours comme 0):
(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);