C# Как представлять (без знака) (без знака int) (ulong) (uint) с Xor (^)
Вопрос
Я преобразую код 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)(...)
или что?
Решение
Использовать 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);
Не связан с StackOverflow