Hong-Phuc Bui
2024-09-27 8a9933e4decb3b6a57b47b6409474bd476920c24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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)