код ниже (на C ++) - это то, что я пытаюсь конвертировать в C #
DWORD Func_X_4(DWORD arg1, DWORD arg2, DWORD arg3)
{
LARGE_INTEGER result = {1, 0};
LARGE_INTEGER temp1 = {0};
LARGE_INTEGER temp2 = {0};
LARGE_INTEGER temp3 = {0};
LARGE_INTEGER temp4 = {0};
for(int x = 0; x < 32; ++x)
{
if(arg2 & 1)
{
temp1.LowPart = arg3;
temp1.HighPart = 0;
temp2.QuadPart = temp1.QuadPart * result.QuadPart;
temp3.LowPart = arg1;
temp3.HighPart = 0;
temp4.QuadPart = temp2.QuadPart % temp3.QuadPart;
result.QuadPart = temp4.QuadPart;
}
arg2 >>= 1;
temp1.LowPart = arg3;
temp1.HighPart = 0;
temp1.QuadPart *= temp1.QuadPart;
temp2.LowPart = arg1;
temp2.HighPart = 0;
temp3.QuadPart = temp1.QuadPart % temp2.QuadPart;
arg3 = temp3.LowPart;
if(!arg2)
break;
}
return result.LowPart;
}
Здесь я попытался перевести код, но он слишком запутанный, и я никогда раньше не работал с Большими целыми числами.
Состав:
public struct LARGE_INTEGER
{
UInt32 LowPart;
Int32 HighPart;
Int32 QuadPart;
}
Переведенная функция:
public Int32 Func_X_4(Int32 arg1, Int32 arg2, Int32 arg3)
{
LARGE_INTEGER result = {1, 0}; //this and the four below,are they correct?
LARGE_INTEGER temp1 = {0, 0};
LARGE_INTEGER temp2 = {0, 0};
LARGE_INTEGER temp3 = {0, 0};
LARGE_INTEGER temp4 = {0, 0};
for(int x = 0; x < 32; ++x)
{
if(arg2 & 1==0) //correct?
{
temp1.LowPart = arg3;
temp1.HighPart = 0;
temp2.QuadPart = temp1.QuadPart * result.QuadPart;
temp3.LowPart = arg1;
temp3.HighPart = 0;
temp4.QuadPart = temp2.QuadPart % temp3.QuadPart;
result.QuadPart = temp4.QuadPart;
}
arg2 >>= 1;
temp1.LowPart = arg3;
temp1.HighPart = 0;
temp1.QuadPart *= temp1.QuadPart;
temp2.LowPart = arg1;
temp2.HighPart = 0;
temp3.QuadPart = temp1.QuadPart % temp2.QuadPart;
arg3 = temp3.LowPart;
if(arg2 != 0) //correct?
break;
}
return result.LowPart;
}
Проблемы:
Первая проблема заключается в том, что я не нашел переменную типа LARGE_INTEGER в C #, поэтому я создал структуру, и я хотел бы знать, существует ли она на самом деле.
Что касается второй проблемы, функция не правильная, ничего не работает.
Любая помощь по этому конкретному вопросу будет принята с благодарностью!
Заранее спасибо.