وقتی در سیستم 32 بیتی یک مقداری را به hash تبدیل می کنیم و همان مقدار را در سیستم 64 بیتی تبدیل می کنیم نتیجه متفاوت مشاهده می شه
آیا راه حلی هست که از 64 بیت به 32 بیت تبدیل کرد؟
وقتی در سیستم 32 بیتی یک مقداری را به hash تبدیل می کنیم و همان مقدار را در سیستم 64 بیتی تبدیل می کنیم نتیجه متفاوت مشاهده می شه
آیا راه حلی هست که از 64 بیت به 32 بیت تبدیل کرد؟
این دستور را پیدا کردم
اما نمی دونم چطوری ازش استفاده کنم
لطفا یک راهنمای بدید
/// <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));
}
}
دوست عزیز شما کد hash x64 را در غالب یک string به تابع می فرستید و تابع خروجی 32 را مجدد در غالب unsafe intبرای شماارسال میکنه
اما فکر کنم از تابع بالا خطا داره
Int32 result= GetHashCode32("کد hash x64 جهت تبدیل به 32")
آخرین ویرایش به وسیله mansourm : یک شنبه 21 آبان 1391 در 11:43 صبح
بله خطا داره
نفهمیدم اشکالش چیه
آیا راه دیگه ای هست؟
دوست عزیزبرای رفع خطای بالا چک گزینه allow unsafe code در مسیر زیر بزنید
project-->project name properties
WCnlV.png
ببخشید پست بالا رم هم اصلاح می کنم فراخوانی به صورت زیر است چون 64 به 32 تبدیل میشه
Int32 result= GetHashCode32("هش کد 64 بیتی");
MessageBox.Show(result.ToString());