نوشته شده توسط
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)