Frage

ähnlich href="https://stackoverflow.com/questions/5415/convert-bytes-to-floating-point-numbers-in-python"> diese Frage

Ich lese zuerst alle zehn Bytes in einen String. Ich möchte dann die einzelnen Informationen analysieren, aus.

kann ich die beiden Versionsnummer Zeichen in der Zeichenfolge, greifen aber dann habe ich keine Ahnung, wie diese beiden Zeichen zu nehmen und eine ganze Zahl von ihnen bekommen.

Die Struktur Paket scheint zu sein, was ich will, aber ich kann es nicht arbeiten.

Hier ist mein Code so weit (ich bin sehr neu btw Python ... es so nehmen einfach auf mich):

def __init__(self, ten_byte_string):
        self.whole_string = ten_byte_string
        self.file_identifier = self.whole_string[:3]
        self.major_version = struct.pack('x', self.whole_string[3:4]) #this 
        self.minor_version = struct.pack('x', self.whole_string[4:5]) # and this
        self.flags = self.whole_string[5:6]
        self.len = self.whole_string[6:10]

Ausdruck außer jeden Wert Mist ist offensichtlich, weil sie nicht korrekt formatiert sind.

War es hilfreich?

Lösung

Wenn Sie eine Zeichenfolge haben, mit 2 Bytes, die Sie wünschen, als ein 16-Bit-Integer zu interpretieren, können Sie dies durch:

>>> s = '\0\x02'
>>> struct.unpack('>H', s)
(2,)

Beachten Sie, dass die> ist für Big-Endian (der größte Teil der ganzen Zahl zuerst kommt). Dies ist das Format ID3-Tags verwenden.

Für andere Größen von integer, verwenden Sie unterschiedliche Formatcodes. z.B. "I" für eine 32-Bit-Integer signiert. Siehe Hilfe (struct) für Details.

Sie können auch mehrere Elemente auf einmal auspacken. zB für 2 unsigned Shorts, gefolgt von einem 32-Bit-Wert unterzeichnet:

>>> a,b,c = struct.unpack('>HHi', some_string)

Möchten Sie von Ihrem Code, die Sie suchen (in der Reihenfolge):

  • 3 char string
  • 2 Single-Byte-Werte (Haupt- und Nebenversion)
  • 1-Byte-Flags Variable
  • eine 32-Bit-Länge Menge

Das Format-String für diese sei:

ident, major, minor, flags, len = struct.unpack('>3sBBBI', ten_byte_string)

Andere Tipps

Warum schreiben Sie Ihre eigenen? (Vorausgesetzt, Sie haben nicht diese Optionen ausgecheckt.) Es gibt ein paar Optionen gibt für von MP3-Dateien in Python in ID3-Tag-Informationen zu lesen. Überprüfen Sie mein beantworten über this Frage.

  

Ich versuche, in einem ID3v2-Tag-Header zu lesen

FWIW, gibt es bereits ein Modul hierfür.

Ich wollte das struct Paket empfehlen, aber dann sagen Sie, Sie es versucht hatten. Versuchen Sie folgendes:

self.major_version = struct.unpack('H', self.whole_string[3:5])

Die Funktion pack() convers Python-Datentypen zu den Bits, und die unpack() Funktion wandelt Bits Python Datentypen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top