import struct # Initialize nodes data nodelist = {} def check_datacode(datacode): # Data types & sizes (number of bytes) datacodes = {'b': '1', 'h': '2', 'i': '4', 'l': '4', 'q': '8', 'f': '4', 'd': '8', 'B': '1', 'H': '2', 'I': '4', 'L': '4', 'Q': '8', 'c': '1', '?': '1'} # if datacode is valid return the data size in bytes if datacode in datacodes: return int(datacodes[datacode]) # if not valid return False else: return False def decode(datacode, frame): # Ensure little-endian & standard sizes used e = '<' # set the base data type to bytes b = 'B' # get data size from data code s = int(check_datacode(datacode)) result = struct.unpack(e + datacode[0], struct.pack(e + b*s, *frame)) return result[0]