import numpy as np def print_binary_pattern_32(x): pattern = bin(x)[2:].zfill(32) print(x, ':', pattern[0:8], pattern[9:16], pattern[17:24], pattern[25:], len(pattern)) def to32_np_fn(x: list[np.uint8,np.uint8,np.uint8,np.uint8]): y = np.left_shift(x, [np.uint32(0), np.uint32(8), np.uint32(16), np.uint32(24)]) return y[0] | y[1] | y[2] | y[3] def to32_bit_op(x: list[np.uint8,np.uint8,np.uint8,np.uint8]): # 1 0000_0000 0000_0000 0000_0000 0000_0000 mask = (2**32) | (x[3] << 24) | (x[2] << 16) | (x[1] << 8) | (x[0]) # remove the most significant bit return mask & (2**32-1) def quaternary_8bit_to_unary_32bit(data, to32_fn): four_group = np.array(data, dtype=np.uint8).reshape((-1, 4)) return np.array([to32_fn(x) for x in four_group]) if __name__ == '__main__': raw_data = [255, 0, 15, 170, 0b101, 0b1100, 0b1001101, 0b1000_0000, 9, 10, 11, 0b1000_0000] print(f"Konvertierung jeweiliger 4er-Tuple in einem uint32") print() print("Mit Python built-int Left-Shift-Operator") result = quaternary_8bit_to_unary_32bit(raw_data, to32_np_fn) for r in result: print_binary_pattern_32(r) print() print("Mit numpy left_shift Funktion") result = quaternary_8bit_to_unary_32bit(raw_data, to32_bit_op) for r in result: print_binary_pattern_32(r)