In Python V.2.5.4 habe ich eine Gleitkommazahl, und ich möchte das Bitmuster dieser Gleitkommazahl erhalten und manipulieren (als Integer).
Nehmen wir zum Beispiel an, ich habe
%Vor% Im IEEE 754-Format ist das Bitmuster von x (in hexadezimaler Schreibweise) 432D5000
.
Wie kann ich & amp; manipulieren (z. B. bitweise Operationen durchführen) mit diesem Bitmuster?
Sie können die gewünschte Zeichenfolge (die offensichtlich eine Big-Endian-32-Bit-Repräsentation enthält; Python verwendet intern die native Endianität und 64 Bit für Floats) mit dem struct
-Modul:
Dies ermöglicht Ihnen noch nicht, bitweise Operationen auszuführen, aber Sie können struct dann erneut verwenden, um die Zeichenfolge in ein int zu mappen:
%Vor% und jetzt haben Sie eine int
, die Sie in jeder Art von bitweisen Operationen verwenden können (folgen Sie den gleichen zwei Schritten in umgekehrter Reihenfolge, wenn Sie nach diesen Operationen wieder float
erhalten müssen).
Das Problem besteht darin, dass ein Python-Float-Objekt möglicherweise kein IEEE 754 ist, weil es ein Objekt ist (tatsächlich sind sie das, aber intern könnten sie die jeweils passende Darstellung enthalten) ...
Wie Sie bereits gesagt haben, können Sie eine Typumwandlung mit Ctypes durchführen, so dass Sie eine bestimmte Repräsentation erzwingen (in diesem Fall einfache Genauigkeit):
%Vor%Und dann zurück:
%Vor% Verwenden Sie struct
oder xdrlib
Modul:
Jetzt können Sie mit numeric
arbeiten und dann in die umgekehrte Richtung gehen, um Ihre Fließkommazahl zurück zu bekommen. Sie müssen & gt; I (unsigned int) verwenden, um eine negative Zahl zu vermeiden. xdrlib
ist ähnlich.
Ich bin zu diesem Thema nicht sehr versiert, aber haben Sie das ctypes
Modul ausprobiert? / p>
Tags und Links python floating-point bit-manipulation