نمایش نتایج 1 تا 4 از 4

نام تاپیک: دسترسی به چهاربایت float32 در پایتون

  1. #1

    دسترسی به چهاربایت float32 در پایتون

    درود و وقت بخیر
    معمولا این جور سوالات رو با گوگل کردن پیدا میکردم ولی وضعیت اینترنت چاره ای نذاشته...

    هدف اینه که یک متغییر ممیز شناور 32 بیتی را به چهار متغیر 8 بیتی تبدیل کنیم.
    در زبان سی با union ها (اگر درست نوشته باشم) انجامش میدادیم:

    union{
    float a;
    unsigned char binary_a[4];
    }

    (البته شبه کد رو ذهنی نوشتم شاید اشتباه باشه ولی خب منظورمو میرسونه)
    همین کارو میخوام با پایتون انجام بدم و ترجیحا بدون numpy و... چون با اینترنت ملی نمیدونم چطوری پکیج نصب کنم

    ممنون

  2. #2

    نقل قول: دسترسی به چهاربایت float32 در پایتون

    عدد رو ببر در مبنای باینری و استرینگش کن بعدا با slice به چهار قسمت تبدیلش کن

  3. #3

    نقل قول: دسترسی به چهاربایت float32 در پایتون

    تغییر مبنا؟
    اگر خودم تغییر مبنا بدم که میشه fixed point و داده از دست میره
    اگر روش خاصی در پایتون هست که ممیز شناور رو تبدیل کنه ممنون میشم اشاره کنید

    در جاوا و سی شارپ میشد که یک آبجکت رو serialize کنیم. اینجا با پایتون نمیشه همچین حرکتی زد؟

  4. #4

    نقل قول: دسترسی به چهاربایت float32 در پایتون

    نقل قول نوشته شده توسط salehjg مشاهده تاپیک
    درود و وقت بخیر
    معمولا این جور سوالات رو با گوگل کردن پیدا میکردم ولی وضعیت اینترنت چاره ای نذاشته...

    هدف اینه که یک متغییر ممیز شناور 32 بیتی را به چهار متغیر 8 بیتی تبدیل کنیم.
    در زبان سی با union ها (اگر درست نوشته باشم) انجامش میدادیم:

    union{
    float a;
    unsigned char binary_a[4];
    }

    (البته شبه کد رو ذهنی نوشتم شاید اشتباه باشه ولی خب منظورمو میرسونه)
    همین کارو میخوام با پایتون انجام بدم و ترجیحا بدون numpy و... چون با اینترنت ملی نمیدونم چطوری پکیج نصب کنم

    ممنون
    متاسفانه تسلطی به پایتون ندارم، فقط در حد دو روز راهنماشو خوندم. شاید راه حل بهتری هم باشه ولی خروجی باینری این رو با مقادیر معادل #C مقایسه کردم و جواب داده :
    یک عدد اعشاری مثل n داریم :

    >>> n : float = 1.23


    کتابخانه مربوط به struct رو وارد می کنیم :

    from struct import *


    عدد رو به آرایه ای از بایت ها تبدیل می کنیم که معادل float زبان C باشه که 32 بیتی است، اگر بجای 'f' از 'd' استفاده می کردیم معادل double زبان C میشد که 64 بیتی است.

    b : bytes = pack('f', n)


    حالا در b چهار بایت مجزا شده اند، b[0] و b[1] و b[2] و b[3] ولی اگر بخواهید می توانید در یک عدد 32 بیتی ترکیب شان را هم داشته باشید :

    x : int = int.from_bytes(b, byteorder='little', signed=False)

تاپیک های مشابه

  1. دسترسی به محیط پایتون
    نوشته شده توسط hmgjob در بخش Python
    پاسخ: 1
    آخرین پست: شنبه 25 فروردین 1397, 23:33 عصر
  2. پاسخ: 4
    آخرین پست: سه شنبه 17 مرداد 1391, 14:51 عصر
  3. پاسخ: 4
    آخرین پست: یک شنبه 16 مرداد 1390, 02:43 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

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