Domanda

Sono conversione del codice C ++ a C #

dire che ho ottenuto questo in C ++

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

In C # sarebbe come ..

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

Ma ottengo errori .. con la (ulong), (uint)

Operatore '^' non può essere applicato a operandi di tipo 'int' e 'ulong'

devo fare

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

o cosa?

È stato utile?

Soluzione

Usa BitConvert.ToUInt32 (corrisponde al tipo DWORD da Win32 C ++ di programmazione), invece di ToInt32 (di norma una int), che dovrebbe aiutare a perdere alcuni dei calchi e risolvere alcuni dei problemi di tipo.

Una conversione fedele dovrebbe essere qualcosa di simile a quanto segue, anche se non credo che sia necessario avere il cast intermedio ulong (Dal momento che i 32 bit più significativi vengono ignorati quando facciamo il mod 9 in ogni caso e credo che faranno sempre finire come 0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top