Работа с указателями и битовые операции (с C++ в C#)
Формулировка задачи:
Помогите перевести это в эффективный C# код
int UnknownFunc0001(signed int a1) { return ((a1 >> 24) & 0xFF) + ((((a1 >> 16) & 0xFF) + ((((BYTE)a1 << 8) + ((a1 >> 8) & 0xFF)) << 8)) << 8); } int CryptPacket(DWORD* pBuffer, signed int a2, int iKey) { int result = ((a2&0xFF00)|(a2&0xFC))/4; if (result > 0) { int v4 = 0; DWORD* v6 = pBuffer; int v7 = ~iKey; for (int i = ~iKey; ; v7 = i ) { a2 = UnknownFunc0001(*v6 ^ v7); for(int v8 = 0; v8 < 4; v8 += 2) { *((char*)&a2+v8) = (v8 | ((BYTE)v8 << v8) | UnknownBytes[((BYTE)(v4-(DWORD)&a2) + (BYTE)&a2 + (BYTE)v8) & 0xF] | 0xA5) ^ *((BYTE *)&a2 + v8); } ++v4; *v6 = iKey ^ a2; v6++; if(v4 >= result) break; } } return result; }
Решение задачи: «Работа с указателями и битовые операции (с C++ в C#)»
textual
Листинг программы
public unsafe int Crypt(byte[] Buffer, uint Offset, int Size, int Key) { int result = (Size & 0xFF00) | (Size & 0xFC) / 4; if (result > 0) { fixed (byte* p = Buffer) { uint* pBuffer = (uint*)((int)(p + Offset)); for (int i = 0; i < result; i++, pBuffer++) { Size = (int)((((*pBuffer ^ ~Key) >> 24) & 0xFF) + (((((*pBuffer ^ ~Key) >> 16) & 0xFF) + ((((byte)(*pBuffer ^ ~Key) << 8) + (((*pBuffer ^ ~Key) >> 8) & 0xFF)) << 8)) << 8)); for (byte j = 0; j < 4; j++) { *((byte*)&Size + j) = (byte)((j | (j << j) | Mungify_Table[((byte)(i - (uint)&Size) + (byte)&Size + j) & 0xF] | 0xA5) ^ *((byte*)&Size + j)); } *pBuffer = (uint)(Key ^ Size); } } } return result; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д