PDA

View Full Version : حرفه ای: کمک در تبدیل سه تابع از C#‎ به PHP (حل شد)



kzzk84
یک شنبه 28 خرداد 1391, 02:15 صبح
سلام دوستان من میخوام سه تابع از C#‎‎‎ به PHP تبدیل کنم بیشتر تو جنبه تبدیل نوع ها مشکل دارم این سه تابع از یک کلاسه
void make_crc_revtable()
{
UInt32 c;
int n, k;
for (n = 0; n < 256; n++)
{
c = (uint)n << 3 * 8;
for (k = 0; k < 8; k++)
{
if ((c & 0x80000000) != 0)
{
c = ((c ^ CRCPOLY) << 1) | 1;
}
else
{
c <<= 1;
}
}
crc_revtable[n] = c;
}
}

private void make_crc_table()
{
UInt32 c;
int n, k;
for (n = 0; n < 256; n++)
{
c = (UInt32)n;
for (k = 0; k < 8; k++)
{
if ((c & 1) != 0)
{
c = CRCPOLY ^ (c >> 1);
}
else
{
c = c >> 1;
}
}
crc_table[n] = c;
}
}


uint fix_crc_pos(ref byte[] buffer, int length, UInt32 tcrcreg, int fix_pos)
{
int i;
// make sure fix_pos is within 0..( length -1)
fix_pos = ((fix_pos % length) + length) % length;

// calculate crc register at position fix_pos ; this is essentially crc32 ()
UInt32 crcreg = INITXOR;
for (i = 0; i < fix_pos; ++i)
crcreg = (crcreg >> 8) ^ crc_table[((crcreg ^ buffer[i]) & 0xFF)];
// inject crcreg as content
crcreg &= 0xFFFFFFFF;
byte[] newData = BitConverter.GetBytes(crcreg);
for (i = 0; i < 4; ++i)
buffer[fix_pos + i] = newData[i];


// calculate crc backwards to fix_pos , beginning at the end
tcrcreg ^= FINALXOR;
for (i = length - 1; i >= fix_pos; --i)
{
tcrcreg = (tcrcreg << 8) ^ crc_revtable[tcrcreg >> 3 * 8] ^ buffer[i];
}
// inject new content
return (tcrcreg &= 0xFFFFFFFF);
}

تا هر اندازه بتونید کمک کنید ممنون میشم حتی اگر یه لینک باشه
تابع آخریه خیلی مهم تره

MSN_Issue
یک شنبه 28 خرداد 1391, 09:00 صبح
دوست عزیز در PHP لازم نیست نوع یک متغییر رو تعیین کنید !!
برای تمام متغییرهاتون فقط لازمه که یه نام بهشون بدید :دی !!!

kzzk84
یک شنبه 28 خرداد 1391, 09:30 صبح
دوست عزیز در PHP لازم نیست نوع یک متغییر رو تعیین کنید !!
برای تمام متغییرهاتون فقط لازمه که یه نام بهشون بدید :دی !!!

ممنون از جوابتون اما برا این سطح از کار لازمه چون نتیجه شیفت ها در هر دو زبان با این کار شما یکی نمیشه

Yousha
یک شنبه 28 خرداد 1391, 11:38 صبح
خود PHP تابع crc32 داخلی داره

kzzk84
یک شنبه 28 خرداد 1391, 13:11 عصر
خود PHP تابع crc32 داخلی داره

حرف شما متین اما کارکرد این توابع به این شکل که یک قسمت از اطلاعات که زیاد برامون مهم نباشه رو تغییر میدیم تا مقدار ‌crc اون مقدار دلخواهمون بشه

kzzk84
دوشنبه 29 خرداد 1391, 21:13 عصر
آقایون ممنون از همگی با دو تابع که مشکل شیفت راست و تبدیل int به uint راحت تبدیل شدند