C # Come rappresentare (unsigned long) (unsigned int) (ULONG) (uint) con XOR (^)
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?
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);