In einer Klasse, in der ich bin, sind wir einem einfachen Mips-Simulator zugeordnet. Die Anweisungen, die mein Programm verarbeiten soll, sind in einer Binärdatei angegeben. Ich habe keine Ahnung, wie ich aus dieser Datei etwas brauchbares herausholen kann. Hier ist mein Code:Wie kann ich binäre Daten von einer Datei in lesbare Basis zwei Binär in Python konvertieren?
Also, zuerst habe ich nur die 4 Bytes gedruckt ich gelesen, um zu sehen, was zurückgegeben wurde. Ich hatte gehofft, einfache Bits (nur 1 und 0) zu sehen. Was ich bekam, waren Byte-Strings von dem, was ich gelesen habe. Also habe ich versucht zu googeln, um herauszufinden, was ich dagegen tun kann. So fand ich, dass ich Struct verwenden konnte, um diese Byte-Zeichenfolgen in ganze Zahlen zu konvertieren. Das gibt sie in einem Format wie (4294967295,) aus.
Das ist immer noch ärgerlich, weil ich das trimmen muss, um es zu einer brauchbaren Ganzzahl zu machen, sogar noch muss ich es in Bits umwandeln (Basis 2). Es ist nett, dass ich die Bytes mit struct entweder als vorzeichenbehaftet oder als vorzeichenlos lesen kann, weil die Hälfte der Eingabe der Eingabedatei 32-Bit-Nummern mit Vorzeichen sind.
All dies scheint viel komplizierter als es sein sollte, nur die Bits aus einer Binärdatei zu bekommen. Gibt es einen einfacheren Weg dies zu tun? Kannst du es auch jemandem erklären, der mit esoterischem Python-Code nicht sehr vertraut ist und der für Binärdaten neu ist?
Mein übergeordnetes Ziel ist es, gerade 32 Bit aus jedem gelesenen 4 Byte zu bekommen. Der Anfang der Datei ist eine Liste von Mips-Opcodes. Also muss ich in der Lage sein, bestimmte Teile dieser Zahlen zu sehen, wie die ersten 5 Bits, dann die nächsten 6, oder so weiter. Das Ende der Datei enthält vorzeichenbehaftete Ganzzahlwerte mit 32 Bit. Die beiden Dateihälften sind durch einen Opcode getrennt.
Vielen Dank für jede Hilfe, die Sie mir geben können. Es macht mich verrückt, dass ich durch Suchen keine direkten Antworten finden kann. Wenn Sie die Binärdatei sehen wollen, sagen Sie mir, wo und ich werde es veröffentlichen.
Möchten Sie nur die Bits eines Wertes visualisieren (https://stackoverflow.com/questions/18111488/convert-integert-to-binary-in-python-and-compare-the-bits), oder möchten Sie sie in [integer] (https: // stackoverflow.com/questions/30971079/How-Do-ich-Convert-ein-Integer-zu-einer-Liste-von-Bits-in-Python) Formular für weitere Manipulation? – Reti43
Ich muss sie als Bits lesen, denke ich. Weil ich spezifische Längen von jedem 32-Bit-Wert benötige. Wie ich sehen muss, was die ersten 6 Bits sind, dann die nächsten 5 usw. Ich brauche also die Werte in geraden Bits, denke ich. Es sei denn, es gibt einen besseren Weg, aber meines Wissens ist dies der einzige Weg, wie ich mit den Daten arbeiten kann. – Jacob
Es gibt ein paar Möglichkeiten, dies zu tun. Sehen Sie sich die obigen Links in meinem Kommentar an. Ich schlage vor, dass Sie in der Frage auch genau angeben, was Ihr Ziel ist, andernfalls können wir keine besseren Ansätze vorschlagen als die Lösung, die Sie in der Frage implementieren möchten. – Reti43