Seite 1 von 1

struct.pack - Wertebereich der Variablen

Verfasst: Freitag 12. November 2010, 22:48
von Poseidonius
Hi,

ich möchte verschieden aufgebaute Variablen mit struct.pack() als Binärdaten "zusammenpacken". Dabei kenne ich die jeweiligen Datentypen die für die einzelnen Werte benutzt werden sollen. Wie zum Fuchs kann ich den Wertebereich eines Datentypes (angeben als C Datentyp oder im Python struct Buchstabenkürzel) herausbekommen, um zu prüfen, ob dieser überhaupt zu einem Wert passt.

Beispiel: 'B' = unsigned char = 0 - 255 -> Ausgabe an den User, dass er einen anderen Datentyp vorgeben muss.

Natürlich könnte ich alle Wertebereiche der Datentypen hinterlegen, aber das ist so unsexy. Hat jemand eine bessere Idee?

Code: Alles auswählen

def datatype_ok(value, datatype):
      if ?:
            return 1
            print ('Datentyp ok')
      else:
            return 0
            print ('Value ausserhalb des Zahlenbereiches von %s')%datatype

print (310, 'unsigned char')
print (310, 'B')

Re: struct.pack - Wertebereich der Variablen

Verfasst: Samstag 13. November 2010, 00:05
von jerch
Soll das plattformunabhängig funktionieren? Du kannst mit struct auf die nativen Typen zugreifen, dann funktioniert aber ein 64bit-long nicht mehr auf einem 32bit System (Linux). Was immer geht, ist auf die Bytegrösse runterzugehen und schauen, ob der Wert, den Du in Python hast, da noch reinpasst. Bei signed ist es halt ein Bit weniger als 2^(8*Bytes)-1.
So richtig verstehe ich Dein Problem aber nicht.

Vllt. hilft Dir struct.calcsize() weiter:

Code: Alles auswählen

# Groesse eines long in Byte
struct.calcsize('l') # liefert z.B. 4: 2**32-1 fuer unsigned bzw. 2**31-1 fuer signed

Re: struct.pack - Wertebereich der Variablen

Verfasst: Samstag 13. November 2010, 07:44
von Poseidonius
struct.calcsize() ... da hätte man auch drauf kommen können, wenn man sich die Doku einfach ein Stückchen weiter durchgelesen hätte ! Genau das was ich gesucht habe.

Tausend Dank und ein schönes Wochenende für jerch

Poseidonius