PDA

View Full Version : سوال: چگونگی تبدیل gethashcode 64 bit به 32 bit



sadaf_
یک شنبه 21 آبان 1391, 11:02 صبح
وقتی در سیستم 32 بیتی یک مقداری را به hash تبدیل می کنیم و همان مقدار را در سیستم 64 بیتی تبدیل می کنیم نتیجه متفاوت مشاهده می شه
آیا راه حلی هست که از 64 بیت به 32 بیت تبدیل کرد؟

sadaf_
یک شنبه 21 آبان 1391, 11:22 صبح
این دستور را پیدا کردم
اما نمی دونم چطوری ازش استفاده کنم
لطفا یک راهنمای بدید

/// <summary>
/// Similar to String.GetHashCode but returns the same
/// as the x86 version of String.GetHashCode for x64 and x86 frameworks.
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static unsafe int GetHashCode32(string s)
{
fixed (char* str = s.ToCharArray())
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*)chPtr;
for (int i = s.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}

mansourm
یک شنبه 21 آبان 1391, 11:45 صبح
دوست عزیز شما کد hash x64 را در غالب یک string به تابع می فرستید و تابع خروجی 32 را مجدد در غالب unsafe intبرای شماارسال میکنه




Int32 result= GetHashCode32("کد hash x64 جهت تبدیل به 32")

اما فکر کنم از تابع بالا خطا داره

sadaf_
یک شنبه 21 آبان 1391, 12:02 عصر
بله خطا داره
نفهمیدم اشکالش چیه
آیا راه دیگه ای هست؟

mansourm
یک شنبه 21 آبان 1391, 12:33 عصر
دوست عزیزبرای رفع خطای بالا چک گزینه allow unsafe code در مسیر زیر بزنید
project-->project name properties

94751

ببخشید پست بالا رم هم اصلاح می کنم فراخوانی به صورت زیر است چون 64 به 32 تبدیل میشه




Int32 result= GetHashCode32("هش کد 64 بیتی");
MessageBox.Show(result.ToString());