ich habe folgende Aufgabe.
Ich bekomme einen Bytestring bzw. eine bytearray wie bspw a = bytearray(b'G\xc3\x00\x00'
Darin sind integer Werte verpackt. Die Codierung ist: (Wert des ersten Byte in Dec* x 256^0) + (Wert des zweiten Byte in Dec x 256^1) + (Wert des dritten Byte in Dec x 256^3) + usw.
Die Ergebnisse können signed oder unsigned sein. Ich weiß, welcher Werte signed sind und welche unsigned.
Bislang habe ich das so gelöst.
Code: Alles auswählen
def decode_rawvalue(self, rawdatabytes, commandsignage):
byteindex = 0
rawvalue = 0
while (len(rawdatabytes) > 0):
# Erstes Byte zwischenspeichern
leftbyte = rawdatabytes[:1]
# Wert des Bytes ermitteln
value = int(ord(leftbyte))
# Gewichten / Multiplizieren
if (byteindex > 0):
value = int(value * pow(256, byteindex))
# Aufaddieren der einzelnen Bytes
rawvalue = rawvalue + value
# Byteindex hochzählen, damit das Byte mit entsprechend mit 1, 256, 65536, 16777216, usw. multipliziert werden kann
byteindex = byteindex + 1
# Bytestring um das erste Byte verkürzen
rawdatabytes = rawdatabytes[1:]
# Signed/Unsigned berücksichtigen
if (commandsignage == 'signed'):
if ((byteindex == 1) and (rawvalue > 127)):
rawvalue = (256 - rawvalue) * (-1)
elif ((byteindex == 2) and (rawvalue > 32767)):
rawvalue = (65536 - rawvalue) * (-1)
#elif ((byteindex == 4) and (rawvalue > 2147483647)):
# rawvalue = (4294967296 - rawvalue) * (-1)
return rawvalue