Seite 1 von 1

1 Byte integer mit unpack auslesen

Verfasst: Samstag 20. September 2008, 11:38
von oxygene
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

Verfasst: Samstag 20. September 2008, 11:43
von Trundle
``unpack`` gibt ein Tupel zurück, und das erste Element davon ist deine Zahl.

Verfasst: Samstag 20. September 2008, 11:47
von oxygene
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?

Verfasst: Samstag 20. September 2008, 11:54
von BlackJack
@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.