C # Как представлять (unsigned long) (unsigned int) (ulong) (uint) с помощью XOR (^) - PullRequest
0 голосов
/ 06 сентября 2011

Я конвертирую код C ++ в C #

Скажи, что я получил это в C ++

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

В C # это было бы как ..

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

Но я получаю ошибки .. с (ulong), (uint)

Оператор '^' нельзя применить к операндам типа 'int' и 'ulong'

Должен ли я сделать

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

или что?

1 Ответ

0 голосов
/ 06 сентября 2011

Используйте BitConvert.ToUInt32 (соответствует типу DWORD из программирования на Win32 C ++) вместо ToInt32 (обычно int), что должно помочь вам потерять некоторые приведения и решить некоторые проблемы с типами.

Точное преобразование должно быть примерно следующим, хотя я не думаю, что необходимо иметь промежуточное приведение к ulong (поскольку 32 старших бита игнорируются, когда мы все равно делаем мод 9 иЯ думаю, что они всегда будут в итоге 0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);
...