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)
|