Convertiți octeți la numerele cu puncte plutitoare în Python

Am un fișier binar pe care trebuie să-l analizez și îl folosesc pe Python. Există o modalitate de a lua 4 octeți și ao converti la un singur număr de punct de virgulă cu precizie?

0
fr hi bn

2 răspunsuri

Veți dori pachetul struct .

0
adăugat
Ați putea avea un vot câștigător, dar nu ați adăugat un exemplu de cod ...
adăugat autor Mayhem, sursa
Adăugați un cod de demonstrație și o să vă anunțe.
adăugat autor John Mulder, sursa
>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\[email protected]'
>>> struct.unpack('f', b'\xdb\[email protected]')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\[email protected]\x00\[email protected]@\x00\x00\[email protected]'
0
adăugat
Sunt de acord cu @dlass, ce zici de alte flotoare. Și de ce există o virgulă la sfârșitul acestui șir?
adăugat autor Startec, sursa
@startec Întrebarea era despre plutitoare de 4 octeți. Ce șir se termină cu o virgulă? Numai tupla din struct.unpack are o virgulă.
adăugat autor tzot, sursa
@PetrKrampl acuratețea C float (unică, 4 octeți) și C dublu (dublu, 8 octeți). Python float este într-adevăr C double . Indiferent de precizia stocării 3.141592654 ca C dublu , aceasta se pierde atunci când este convertită la un float C (după struct.pack) la C double (Python extrage cele 4 octeți ca C float și apoi convertește rezultatul într-un C double float ). Acest lucru se aplică tuturor implementărilor Python care utilizează numerele c
adăugat autor tzot, sursa
Notă: pentru a vizualiza octeții individuali ai bytearray (indicat de b '), utilizați list() . Ex: lista (struct.pack ('f', 3.141592654)) returnează o listă de octeți individuali ca [219, 15, 73, 64] . Acest lucru este foarte util.
adăugat autor Gabriel Staples, sursa
Acest lucru funcționează doar pentru 4 sau 8 octeți plutiți. Ce zici de flotoare de 10 octeți?
adăugat autor dplass, sursa
Am găsit o referință în altă parte, mulțumesc.
adăugat autor dplass, sursa
ok, și despre compararea celor două numere? >>> structură de import >>> a = 3.141592654 >>> tipăriți un 3.141592654 >> > a_packed = struct.pack ('f', a) >>> b = struct.unpack ('f', a_packed) [0] 3.14159274101 >>> afirmați a == b, "A B" Traceback "", rândul 1, în " AssertionError: A non B
adăugat autor Petr Krampl, sursa
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.