Je suis aux prises avec un problème de format numérique dans Python 3.6. Mon but est de convertir les données binaires d'un fichier en nombres décimaux imprimables. À titre d'exemple, je dois convertir deux octets little-endian sous la forme d'une chaîne d'octets ...Décomptage binaire à point fixe en python
b '\ x12 \ 00'
dans sa forme binaire big-endian ...
et enfin à sa forme nombre décimal 16-bit fixed-point Q15 ...
(1/4096) + (1/16384) = 0.00030517578
Dans mes tentatives infructueuses, la fonction struct.unpack semblait prometteuse, mais mon expérience de représentation de bas niveau/nombre n'est pas très mature pour le moment.
Échec tentative:
struct.unpack('<h', b'\x12\x00') # Yields (18,)
Le code ci-dessus me fait "18", ce qui serait bien si les octets représentent un nombre entier, mais ils ne le font pas.
Toute aide ou conseil serait apprécié. Je vous remercie!
Les octets représentent un entier qui a été décalé de 15 bits. Diviser par 32768 (2 ** 15) pour obtenir la valeur réelle Q15. (Cela ne correspond pas à la valeur que vous avez calculée, mais c'est parce que vous avez mal fait les maths - les deux bits ont en réalité des valeurs de place de 1/2048 et 1/16384.) – jasonharper
@jasonharper Vous avez raison, belle prise! Votre solution fonctionne, et je crois que je comprends votre approche. Je vous remercie! –