سلام دوستان، صبح بخیر....
من یه رشته هشت کاراکتری که نشون دهنده یه عدد در مبنای هگز هست رو می خوام به یه عدد در مبنای دسیمال تبدیل کنم.... برنامه ای نوشتم که با گرفتن یک به یک این کاراکترها این تبدیل رو انجام میده... اما یه اتفاق جالب این وسط میفته... و اون هم اینه که اگر عدد بزرگ باشه... خطا وجود داره. نوع متغیری رو که قراره عدد دسیمال در اون قرار بگیره یه بار unsigned long int در نظر گرفتم وقتی دیدم خطا داره... دفعه بعد float در نظر گرفتم ولی همچنان این خطا باقی است. من برای نشون دادن عدد دسیمال نهایی روی LCD از دستور ltoa یا ftoa استفاده کردم.
رشته هایی رو که برای تست در نظر گرفتم، اینها هستند(مقادیر معادل دسیمال رو هم روبروی هر رشته نوشتم):
اما جواب هایی که برای unsigned long int می گیرم:
برای اولین حالت یه عدد منفی
دومین: 234881056 می بینید خطا داره! بقیه موارد دقیق بدست می آیند!
و جوابهایی که برای حالت float می گیرم:
حالت اول: 3758096896
دومین: 234881056
سومین: 14680066
چهارمین: 917507.125
پنجمین: 57344.007812
ششمین: 3584
هفتمین: 244.000030
هشتمین: 14
شما می دونید چرا اینطور میشه؟
بی نهایت سپاس از همفکری شما :biggrin:
من یه رشته هشت کاراکتری که نشون دهنده یه عدد در مبنای هگز هست رو می خوام به یه عدد در مبنای دسیمال تبدیل کنم.... برنامه ای نوشتم که با گرفتن یک به یک این کاراکترها این تبدیل رو انجام میده... اما یه اتفاق جالب این وسط میفته... و اون هم اینه که اگر عدد بزرگ باشه... خطا وجود داره. نوع متغیری رو که قراره عدد دسیمال در اون قرار بگیره یه بار unsigned long int در نظر گرفتم وقتی دیدم خطا داره... دفعه بعد float در نظر گرفتم ولی همچنان این خطا باقی است. من برای نشون دادن عدد دسیمال نهایی روی LCD از دستور ltoa یا ftoa استفاده کردم.
رشته هایی رو که برای تست در نظر گرفتم، اینها هستند(مقادیر معادل دسیمال رو هم روبروی هر رشته نوشتم):
E0000000=3758096384
0E000000=234881024
00E00000=14680064
000E0000=917504
0000E000=57344
00000E00=3504
000000E0=224
0000000E=14
0E000000=234881024
00E00000=14680064
000E0000=917504
0000E000=57344
00000E00=3504
000000E0=224
0000000E=14
اما جواب هایی که برای unsigned long int می گیرم:
برای اولین حالت یه عدد منفی
دومین: 234881056 می بینید خطا داره! بقیه موارد دقیق بدست می آیند!
و جوابهایی که برای حالت float می گیرم:
حالت اول: 3758096896
دومین: 234881056
سومین: 14680066
چهارمین: 917507.125
پنجمین: 57344.007812
ششمین: 3584
هفتمین: 244.000030
هشتمین: 14
شما می دونید چرا اینطور میشه؟
بی نهایت سپاس از همفکری شما :biggrin:
دیدگاه