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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: mo_jadidi در 24 دی 1390، 08:48 ب‌ظ

عنوان: پیش فرض فرمول تبدیل یک آرایه کاراکتری به یک عدد اعشاری
ارسال شده توسط: mo_jadidi در 24 دی 1390، 08:48 ب‌ظ
سلام

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

float f;
 f=*(float*)m;
برای مثال
اگر m={65,236,70,0}
باشه
f=29.534179
میشه
چطوری ؟؟؟؟؟؟؟؟؟؟؟
ممنون
عنوان: پاسخ به: پیش فرض فرمول تبدیل یک آرایه کاراکتری به یک عدد اعشاری
ارسال شده توسط: doomhammer65ir در 25 دی 1390، 02:29 ق‌ظ
کد ها را در میان (http://forum.ubuntu.ir/Themes/ubuntu-ir/images/bbc/code.gif) بگذارید
عنوان: پاسخ به: پیش فرض فرمول تبدیل یک آرایه کاراکتری به یک عدد اعشاری
ارسال شده توسط: جادی در 25 دی 1390، 06:13 ب‌ظ
من متوجه سوال نشدم. الان این تبدیل دقیقا چیه؟ این دو تا عدد که ربطی به هم ندارن.

شاید هم کلا سوال اینه که چرا وقتی نوشتی
f=*(float*)m;یک عدد برگشته. اگر سوال اینه باید دقت کنی که متغیرها فقط و فقط مکان هایی در حافظه هستن و این برنامه نویس است که می گه به چهار بایتی که در فلان جای حافظه ذخیره شده به عنوان یک رشته کاراکتری باید نگاه بشه یا به عنوان یک عدد فلوت یا لانگ اینت یا هر چی.
عنوان: پاسخ به: پیش فرض فرمول تبدیل یک آرایه کاراکتری به یک عدد اعشاری
ارسال شده توسط: mo_jadidi در 25 دی 1390، 09:36 ب‌ظ
من متوجه سوال نشدم. الان این تبدیل دقیقا چیه؟ این دو تا عدد که ربطی به هم ندارن.

شاید هم کلا سوال اینه که چرا وقتی نوشتی
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 در 25 دی 1390، 09:39 ب‌ظ
کد ها را در میان (http://forum.ubuntu.ir/Themes/ubuntu-ir/images/bbc/code.gif) بگذارید
میشه بیشتر توضیح بدید
# یعنی چی؟
عنوان: پاسخ به: پیش فرض فرمول تبدیل یک آرایه کاراکتری به یک عدد اعشاری
ارسال شده توسط: doomhammer65ir در 25 دی 1390، 11:18 ب‌ظ
#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