Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python

Beachten Sie, dass ich immer vergesse, wie man Ctyes benutzt. Ich möchte die Bytes im Speicher von a sehen, wenn a = 0,5.

>>> import ctypes
>>> a = ctypes.c_float(0.5)
>>> a
c_float(0.5)
>>> a.value
0.5
>>> ctypes.cast(ctypes.byref(a), ctypes.POINTER(ctypes.c_float))
<__main__.LP_c_float object at 0x000001FF2A2F59C8>
>>> ctypes.cast(ctypes.byref(a), ctypes.POINTER(ctypes.c_char))
<ctypes.LP_c_char object at 0x000001FF2A2F5B48>
>>> ctypes.cast(ctypes.byref(a), ctypes.POINTER(ctypes.c_char))[0:4]
b'\x00\x00\x00?'

Wenn Sie den Bereich nicht mit [0: 4] angeben, werden Sie wütend. (Fehler wenn [:]) Die Ausgabe wurde so korrigiert, dass sie leicht zu verstehen ist.

>>> b = lambda f: [f'{b:02x}' for b in ctypes.cast(ctypes.byref(ctypes.c_float(f)), ctypes.POINTER(ctypes.c_char))[0:4]]
>>> b(0.5)
['00', '00', '00', '3f']

Andere Zahlen sind übrigens

>>> b(0.25)
['00', '00', '80', '3e']
>>> b(0.866)
['2d', 'b2', '5d', '3f']
>>> b(0.433)
['2d', 'b2', 'dd', '3e']
>>> b(0.216)
['1b', '2f', '5d', '3e']
>>> b(0.0)
['00', '00', '00', '00']
>>> b(1.0)
['00', '00', '80', '3f']

Überprüfen Sie die Umkehrung (float from byte string).

>>> f = lambda b: ctypes.cast(ctypes.create_string_buffer(b), ctypes.POINTER(ctypes.c_float))[0]
>>> f(b'\x2d\xb2\x5d\x3f')
0.8659999966621399
>>> f(b'\x2d\xb2\xdd\x3e')
0.43299999833106995
>>> f(b'\x2d\xb2\x5d\x3e')
0.21649999916553497
>>> f(b'\x3a\xcd\x13\xbf')
-0.5773502588272095

Recommended Posts

Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Überprüfen Sie das Verhalten des Zerstörers in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Ausgabe in Form eines Python-Arrays
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
So ermitteln Sie die Anzahl der Stellen in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
[Python] Ein Programm, das die kürzeste Anzahl von Schritten in einem Spiel findet, das Wolken überquert
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
[Python] Darstellung der Anzahl der Beschwerden von Lebensversicherungsunternehmen in einem Balkendiagramm
Überprüfen Sie die Verarbeitungszeit und die Anzahl der Aufrufe für jeden Prozess mit Python (cProfile).
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
So bestimmen Sie die Existenz eines Selenelements in Python
[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Zeigen Sie eine Liste der Alphabete in Python 3 an
Überprüfen Sie, ob die URL in Python vorhanden ist
Führen Sie den Python-Interpreter im Skript aus
Das Ergebnis der Installation von Python auf Anaconda
Überprüfen Sie den Pfad des importierten Python-Moduls
[Python] [Meta] Ist der Python-Typ ein Typ?
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Die Geschichte der Verarbeitung A von Blackjack (Python)
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
[Python] Ein Programm, das die Anzahl der Schokoladensegmente berechnet, die die Bedingungen erfüllen
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Generieren Sie eine Liste mit der Anzahl der Tage im aktuellen Monat.
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
[Python] Berechnen Sie die Anzahl der Stellen, die zum Ausfüllen von Nullen erforderlich sind. [Hinweis]
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
Richten Sie mit Python einen Dummy-SMTP-Server ein und überprüfen Sie den Sendevorgang von Action Mailer
Zählen Sie, wie oft zwei Werte gleichzeitig in einem Element vom Typ Python 3-Iterator angezeigt werden
4 Methoden zum Zählen der Anzahl von Ganzzahlen in einem bestimmten Intervall (einschließlich der imos-Methode) [Python-Implementierung]
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
[Python] Checklistenelemente alle, alle