C# Как представлять (без знака) (без знака int) (ulong) (uint) с Xor (^)

StackOverflow https://stackoverflow.com/questions/7316234

  •  26-10-2019
  •  | 
  •  

Вопрос

Я преобразую код 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top