1 Byte integer mit unpack auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
oxygene
User
Beiträge: 2
Registriert: Samstag 20. September 2008, 11:34

Samstag 20. September 2008, 11:38

Hallo,

ich habe ein Problem beim auslesen. Folgender Code funktioniert:

Code: Alles auswählen

f = open("k:\zindata.bin", "rb")  # Open in binary mode for portability
s = f.read(12)
x, y, z = struct.unpack("<lll", s)
print(x)
print(y)
print(z)
for i in range(z):
Jedoch wenn ich dann einen 1 Byte integer auslesen möchte bekomme ich probleme:

Code: Alles auswählen

s = f.read(1)
x = struct.unpack("<B",s)
print(x)
s = f.read(x)
Es kommt immer die Fehlermeldung ich bräuchte einen Integer für das auslesen. ich hab jedoch einen Integer mit unpack ausgelesen

was muss ich ändern damit das funktioniert?

vielen dank für die hilfe im voraus
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Samstag 20. September 2008, 11:43

``unpack`` gibt ein Tupel zurück, und das erste Element davon ist deine Zahl.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
oxygene
User
Beiträge: 2
Registriert: Samstag 20. September 2008, 11:34

Samstag 20. September 2008, 11:47

Ah ok mit

Code: Alles auswählen

s = f.read(x[0])
gehts. aber nun nochmal eine frage, wieso kann ich bei der Iteration einfach so auf die variable z verweisen? wieso geht denn dann das?
BlackJack

Samstag 20. September 2008, 11:54

@oxygene: ``print`` ist (noch) keine Funktion, die Schreibweise mit Klammern ist also irreführend.

Bei ``x, y, z = struct.unpack("<lll", s)`` wird die rechte Seite zu einem Tupel ausgewertet, aber das Tupel selbst wird ja nicht einem Namen zugeordnet, sondern die einzelnen Elemente aus dem Tupel an drei Namen gebunden.
Antworten