Используйте 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);