Pregunta

Estoy convirtiendo el código C ++ en C#

Digamos que obtuve esto en C ++

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

En C# sería como ...

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

Pero recibo errores ... con el (ulong) , (uint)

El operador '^' no se puede aplicar a los operandos de tipo 'int' y 'ulong'

Deberia hacer

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

¿o que?

¿Fue útil?

Solución

Usar BitConvert.ToUInt32 (corresponde al DWORD Escriba desde la programación Win32 C ++) en lugar de ToInt32 (normalmente un int), eso debería ayudarlo a perder algunos de los elenco y solucionar algunos de los problemas de tipo.

Una conversión fiel debería ser algo como lo siguiente, aunque no creo que sea necesario tener el elenco intermedio para ulong (Dado que los 32 bits más significativos se ignoran cuando hacemos el Mod 9 de todos modos y creo que siempre terminarán como 0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top