انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: پیش فرض فرمول تبدیل یک آرایه کاراکتری به یک عدد اعشاری  (دفعات بازدید: 4744 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین mo_jadidi

  • Newbie
  • *
  • ارسال: 3
سلام

من در یک قسمت از برنامه با codevision یک آرایه 4 بایتی را با فرمول زیر(type casting(
به یک عدد اعشاری تبدیل کردم ولی از چگونگی این تبدیل بی خبرم
کسی از دوستان میتونه بگه فرمول تبدیلش چیه یعنی چه رابطه ای
بین عناصر آرایه با عدد اعشاری وجود داره
char m[4];

float f;
 f=*(float*)m;
برای مثال
اگر m={65,236,70,0}
باشه
f=29.534179
میشه
چطوری ؟؟؟؟؟؟؟؟؟؟؟
ممنون

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
کد ها را در میان بگذارید

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
من متوجه سوال نشدم. الان این تبدیل دقیقا چیه؟ این دو تا عدد که ربطی به هم ندارن.

شاید هم کلا سوال اینه که چرا وقتی نوشتی
f=*(float*)m;یک عدد برگشته. اگر سوال اینه باید دقت کنی که متغیرها فقط و فقط مکان هایی در حافظه هستن و این برنامه نویس است که می گه به چهار بایتی که در فلان جای حافظه ذخیره شده به عنوان یک رشته کاراکتری باید نگاه بشه یا به عنوان یک عدد فلوت یا لانگ اینت یا هر چی.
آزادی کیبورد حق هر انسان است - جادی

آفلاین mo_jadidi

  • Newbie
  • *
  • ارسال: 3
من متوجه سوال نشدم. الان این تبدیل دقیقا چیه؟ این دو تا عدد که ربطی به هم ندارن.

شاید هم کلا سوال اینه که چرا وقتی نوشتی
f=*(float*)m;یک عدد برگشته. اگر سوال اینه باید دقت کنی که متغیرها فقط و فقط مکان هایی در حافظه هستن و این برنامه نویس است که می گه به چهار بایتی که در فلان جای حافظه ذخیره شده به عنوان یک رشته کاراکتری باید نگاه بشه یا به عنوان یک عدد فلوت یا لانگ اینت یا هر چی.

بهتره سوالم رو این طوری مطرح کنم :
من می خوام یک آرایه 4 تایی رو به یک عدد اعشاری معادلش تبدیل کنم convert char[] to float
در واقع این آرایه معادل یک عدد اعشاریه
با به کار بردن casting type این کار انجام میشه
f=*(float*)m;
f اعشاری
m آرایه ای با 4 عضو کاراکتری
حالا سوال من اینه که در این تغییر نوع داده چه فرمولی هست
یعنی f چه رابطه ای با m[0] , m[1], m[2] ,m[3] داره؟؟؟
البته شما اشاره کردید که:
 متغیرها فقط و فقط مکان هایی در حافظه هستن و این برنامه نویس است که
 می گه به چهار بایتی که در فلان جای حافظه ذخیره شده به عنوان یک رشته کاراکتری
 باید نگاه بشه یا به عنوان یک عدد فلوت یا لانگ اینت یا هر چی.
ولی من فکر میکنم از نظر ریاضی بین این عدد فلوت و چهار کاراکتر یک رابطه ریاضی وجود داره
من این رو می خوام بفهمم یا اگه اشتباه میکنم نمیدونم
من توی چندتا مثالی که با عدد های مختلف انجام دادم دیدم رابطه ای از توان های مختلف 2 بین اونها وجود داره ولی نتونستم به یک فرمول واحد برسم
امیدوارم منظورم رو رسونده باشم
با تشکر

آفلاین mo_jadidi

  • Newbie
  • *
  • ارسال: 3
کد ها را در میان بگذارید
میشه بیشتر توضیح بدید
# یعنی چی؟

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
char m[]={'a','b','c','d'};
float f=*(float *)(m);
cout << "f="<<f<<endl;
return 0;
}
===========================
float f=*(float *)(m);
m را به اشاره گری به ممیز شناور (* float)‌ بدل میکند و سپس به آن اشاره گر ، ارجاع به درون مایه میدهد .
*(float *)(m)*( pointer ) = value of memory where pointed
==========================

m = نشانی آغاز آرایه ی m است . لاکن نمیدانم چرا هنگامی که آرایه از گونه ی کاراکتر باشد با چاپ m آرایه چاپ میشود لاکن زمانی که از گونه ی عدد صحیح ( int ) باشد همانگونه که گمان میبردم نشانی آرایه ی m است . نمونه :
int m[]={'a','b','c','d'};
cout <<"m="<<m<<"\n"<<"*m="<<*m<<endl;
همانگونه گه گمان میبردم m نشانی آغاز آرایه m است .
ایسه این یکی :char m[]={'a','b','c','d'};
cout <<"m="<<m<<"\n"<<"*m="<<*m<<endl;
پاسخ : عملگر >> گرانباریده شدست ( overloaded ) تا هنگامی که آرایه کاراکتری نیز بدان میفرستید مانند رشته با آن برخورد کرده ، همه آرایه را چاپ کند .
برای داشتن نشانی آغاز یک آرایه از  کاراکترها  :
cout << &mcout << &name_of_char_array
« آخرین ویرایش: 25 دی 1390، 11:35 ب‌ظ توسط doomhammer65ir »