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());
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.