C # Comment représenter (unsigned long) (unsigned int) (ulong) (uint) avec XOR (^)

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

  •  26-10-2019
  •  | 
  •  

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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top