ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 10 از 10

موضوع: cast

  1. #1
    2014/08/28
    210
    4

    cast

    سلام
    دوستان ميشه بگين تو قطعه کد زير درسته يا نه.
    من يه متغير از نوع unsigned short دارم ، و ميخام اونو تو دوتا متغير از نو unsigned char بريزم
    قطعه کد زير را ببينيد
    کد:
    unsigned short i=4098  // binary : 0000111111111111
    unsigned char a[2];
    a[0]=i;
    a[1]=(i>>8);
    سوال لينه که ايا تو قطعه کد زير ، 8بيت اول در a[0 و 8 بيت دوم در a[1 قرار ميگيره؟
    باتشکر
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!
  2. #2
    2009/10/21
    تهران
    2,503
    207

    پاسخ : cast

    من تقريبا فكر ميكنم درسته (چون نرم افزار شبيه سازي ندارم كه مطمئن شم)
    بتهره در اين مواقع از اشاره گرها استفاده بشه اينطوري

    unsigned short int i=4098;
    unsigned char a[2];
    unsigned char* chptr=(unsigned char*)&i;
    a[0]= *chptr;
    chptr++;
    a[1]= *chptr;
  3. #3
    2014/08/28
    210
    4

    پاسخ : cast

    نقل قول نوشته اصلی توسط mojalan
    من تقريبا فكر ميكنم درسته (چون نرم افزار شبيه سازي ندارم كه مطمئن شم)
    بتهره در اين مواقع از اشاره گرها استفاده بشه اينطوري

    unsigned short int i=4098;
    unsigned char a[2];
    unsigned char* chptr=(* unsigned char)&i;
    a[0]= *chptr;
    chptr++;
    a[1]= *chptr;
    مهندس اين قسمت چطور عمل ميکنه
    کد:
    unsigned char* chptr=(* unsigned char)&i;
    خب شما اومدين i رو cast کردين.
    اين قسمت به نظرم اشتباست. دليل اول اينکه شما اگرم قرار باشه cast کنين ، چرا پشت unsigned char علامت * گذاشتين. دليل دوم اينکه اگه شما i رو به unsigned cha تبديل کنين ، 1 بايت دادمون از دست ميره . کلا با فرض درست بودن با اين خط مشکل دارم
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!
  4. #4
    2009/10/21
    تهران
    2,503
    207

    پاسخ : cast

    اشاره گرها با توجه به نوع داده اي كه بهش اشاره ميكنن رفتارشون كمي فرق داره مثلا وقتي به يه int دوباتي اشاره ميكنند (يعني آدرس يه int دوبايتي داخلشون ذخيره شده ) اونوقت جهششون در فضاي آدرس دو تا دوتا ميشه ولي اگه مثلا به يه char اشاره كنند جهشها هم يكي يكي ميشه.
    خب ما در اين قسمت كد
    نقل قول نوشته اصلی توسط mojalan

    unsigned char* chptr=(unsigned char*)&i;
    به كامپايلر ميفهمونيم كه ميخوايم از آدرس intآ* دو بايتي بصورت كاراكتري استفاده كنيم (يعني جهشها يكي يكي باشه)
    از طرفي آدرس هر متغير در واقع آدرس اولين بايت كم ارزش (در حالت little Endian) اون متغير هست
    بعد محتويات جاييكه حالا chptrآ* (در واقع همون بايت اول متغير i) رو داخل خونه a[0] ميريزيم
    بعد اشاره گر يه خونه جلو ميره (و چون نوع اشاره گر از int* به char* كست شده) پرش يه خونه به سمت جلو هست كه در واقع ميشه بايت دوم i

    اون گاف ستاره پشت unsigned charآ* هم اصلاح شد
  5. #5
    2014/08/28
    210
    4

    پاسخ : cast

    نقل قول نوشته اصلی توسط mojalan
    اشاره گرها با توجه به نوع داده اي كه بهش اشاره ميكنن رفتارشون كمي فرق داره مثلا وقتي به يه int دوباتي اشاره ميكنند (يعني آدرس يه int دوبايتي داخلشون ذخيره شده ) اونوقت جهششون در فضاي آدرس دو تا دوتا ميشه ولي اگه مثلا به يه char اشاره كنند جهشها هم يكي يكي ميشه.
    خب ما در اين قسمت كد به كامپايلر ميفهمونيم كه ميخوايم از آدرس intآ* دو بايتي بصورت كاراكتري استفاده كنيم (يعني جهشها يكي يكي باشه)
    از طرفي آدرس هر متغير در واقع آدرس اولين بايت كم ارزش (در حالت little Endian) اون متغير هست
    بعد محتويات جاييكه حالا chptrآ* (در واقع همون بايت اول متغير i) رو داخل خونه a[0] ميريزيم
    بعد اشاره گر يه خونه جلو ميره (و چون نوع اشاره گر از int* به char* كست شده) پرش يه خونه به سمت جلو هست كه در واقع ميشه بايت دوم i

    اون گاف ستاره پشت unsigned charآ* هم اصلاح شد
    ممنون از پاسختون
    کد تصحيح شده تو کامپابلر DEV جواب نميده ، خطا ميگيره
    i was not decleared in this scop
    مهندس باز متوجه نشدم :sad:
    من ميدونم اشاره گرها چجوري کار ميکنن .
    الان تو همين خط تصحيح شده ما اومديم يه اشاره گر از نوع unsigned char بنام chptr تعريف کرديم. تا اينجا خب درسته. حالا براي مقدار دادن به اين متغير که از نوع اشاره گر هست ؛ ما بايد ادرس يه متغير از نوع unsigned char بهش بديم. متغيري که ما داريم i هست و نوع اونم unsigned short هست .
    خب شما واسه اينکه i رو با اشاره گر chptr هماهنگ کنين ، نيازه که متغير i به نوع unsigned char تبديل بشه و ادرس اولين خونه درون chptr قرار بگيره .
    خب مشکل همينجاست ( يني مشکل من )
    اون چيزي که من فک ميکنم اينه که شما تو اين خط اومدين i رو به يه اشاره گري از نوع unsigned char تبديل کردين.
    ممنون ميشم بيشتر توضيح بدين
    ياعلي
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!
  6. #6
    2009/10/21
    تهران
    2,503
    207

    پاسخ : cast

    آدرس i با دستور i& بدست مياد. اين آدرس ؛ آدرس بايت با ارزش كمتر i هست (در فرمت Little Endian)
    براي اينكه از اين آدرس استفاده كنيم و تك تك بايتهاي i رو بدست بياريم نياز داريم كه به كامپايلر بفهمونيم ميخوايم اينكار رو بكنيم
    چون در غير اينصورت كامپايلر گير ميده و از طرفي چون نوع اشاره گر int بوده پرشهاي اون در حافظه دو بايت دوبايت هست
    اينجاست كه cast انجام ميشه و با يه دستور به كامپايلر ميگيم اين آدرس i رو بصورت * unsigned char استفاده كن

    نقل قول نوشته اصلی توسط sejil
    خب شما واسه اينکه i رو با اشاره گر chptr هماهنگ کنين ، نيازه که متغير i به نوع unsigned char تبديل بشه و ادرس اولين خونه درون chptr قرار بگيره .
    خب مشکل همينجاست ( يني مشکل من )
    اون چيزي که من فک ميکنم اينه که شما تو اين خط اومدين i رو به يه اشاره گري از نوع unsigned char تبديل کردين.
    من آدرس iآ* رو تغيير نوع دادم نه خود i رو (به اون علامت & پشت i دقت كنيد)
  7. #7
    2013/01/28
    166
    7

    پاسخ : cast

    ممنون گير من هم همين بود عجب دستور باحالي بود ميشه بگيد از کجا اوردينش داخل کدويژن گشتم اين دستور به اين شکل نبود که بشه به کامپايلر فهموند...
    واقعا ممنون
    وميشه برعکسش رو هم توضيح بدين؟
    درد من تنهايي نيست ، بلکه مرگ ملتي است که گدايي را قناعت، بي عرضگي را صبر، و باتبسمي بر لبان اين حماقت را حکمت خداوند مي نامند. ---((گاندي))---
  8. #8
    2014/08/28
    210
    4

    پاسخ : cast

    نقل قول نوشته اصلی توسط b.saeed65
    ممنون گير من هم همين بود عجب دستور باحالي بود ميشه بگيد از کجا اوردينش داخل کدويژن گشتم اين دستور به اين شکل نبود که بشه به کامپايلر فهموند...
    واقعا ممنون
    مهندس اين کد نويسيه . مراجعه کن به مفهوم اشاره گرها . بالا هم تا حدودي گفتم چي به چيه.
    مهندس پروژه به نتيجه رسيد قرار بده بقيه هم استفاده کنن :smile:
    ياعلي
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!
  9. #9
    2013/01/28
    166
    7

    پاسخ : cast

    نقل قول نوشته اصلی توسط sejil
    مهندس اين کد نويسيه . مراجعه کن به مفهوم اشاره گرها . بالا هم تا حدودي گفتم چي به چيه.
    مهندس پروژه به نتيجه رسيد قرار بده بقيه هم استفاده کنن :smile:
    ياعلي
    چشم سعي ميکنم به صورت يک lib قرار بدم تا دوستان بتونن خيلي راحت با AT24cxx کار کنن

    به مرجع c++ رجوع کنم؟
    درد من تنهايي نيست ، بلکه مرگ ملتي است که گدايي را قناعت، بي عرضگي را صبر، و باتبسمي بر لبان اين حماقت را حکمت خداوند مي نامند. ---((گاندي))---
  10. #10
    2014/08/28
    210
    4

    پاسخ : cast

    نقل قول نوشته اصلی توسط b.saeed65
    چشم سعي ميکنم به صورت يک lib قرار بدم تا دوستان بتونن خيلي راحت با AT24cxx کار کنن

    به مرجع c++ رجوع کنم؟
    فرق نميکنه. تو اينترنت سرچ بزني مطلب زياد هست در موردش
    يا اگه کتاب C هم داري ميتوني استفاده کني
    سعي کن مفهومشو بفهمي. اين فهميدنش خيلي مهمه
    ياعلي
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!
نمایش نتایج: از 1 به 10 از 10

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •