SHOW:
|
|
- or go back to the newest paste.
1 | import math | |
2 | from Agregates import message_aggregates | |
3 | ||
4 | #class Decode_fragment(): | |
5 | ||
6 | #konwersja do unsigned int/enum/bool dowolnej liczby bitów | |
7 | def decode_u_int(fragment): | |
8 | value = int(fragment, 2) | |
9 | return value | |
10 | ||
11 | #konwersja do signed int dowolnej liczby bitów | |
12 | def decode_s_int(fragment, bits): | |
13 | byte = int(fragment, 2) | |
14 | if byte > ((2**(bits-1)) - 1): | |
15 | value = (2**bits - byte) * (-1) | |
16 | else: | |
17 | value = byte | |
18 | return value | |
19 | ||
20 | #konwersja ciagów 6-bitowych na string w 6-bit ASCII | |
21 | def decode_t(fragment): | |
22 | value = "" | |
23 | bits = len(fragment) | |
24 | max = math.floor(bits/6) | |
25 | i = 0 | |
26 | while i < max: | |
27 | x = fragment[6*i:6*i+6] | |
28 | y = int(x, 2) | |
29 | if y < 32: | |
30 | z = chr(y+64) | |
31 | if y > 32: | |
32 | z = chr(y) | |
33 | value += z | |
34 | i += 1 | |
35 | return value | |
36 | ||
37 | #konwersja ciągu bitowego na format U1 i U2 | |
38 | def decode_UX(fragment, type): | |
39 | i = 0 | |
40 | number = int(fragment, 2) | |
41 | number = str(number) | |
42 | length = len(number) | |
43 | prefix = "" | |
44 | while i < length - type: | |
45 | prefix += number[i] | |
46 | i += 1 | |
47 | if type == 1: | |
48 | suffix = number[length-1] | |
49 | if type == 2: | |
50 | suffix = number[length-2] + number[length-1] | |
51 | value = float(prefix+'.'+suffix) | |
52 | return value | |
53 | ||
54 | #konwersja ciągu bitowego na format I1, I2, I3, I4 | |
55 | def decode_IX(fragment, bits, type): | |
56 | ##konwersja na bezwzgledna wartosc z signed int + zachowanie znaku | |
57 | sign = 0 | |
58 | byte = int(fragment, 2) | |
59 | if byte > ((2**(bits-1)) - 1): | |
60 | number = (2**bits - byte) | |
61 | sign = 1 | |
62 | else: | |
63 | number = byte | |
64 | ##jeśli długość stringa jest zbyt mała dodaj 0 | |
65 | number = str(number) | |
66 | len_1 = len(number) | |
67 | if (len_1 - type) == (-3): | |
68 | number = '0000' + number | |
69 | if (len_1 - type) == (-2): | |
70 | number = '000' + number | |
71 | if (len_1 - type) == (-1): | |
72 | number = '00' + number | |
73 | if (len_1 - type) == (0): | |
74 | number = '0' + number | |
75 | len_2 = len(number) | |
76 | ||
77 | ##z tego zapisu wynikają dodane 0 powyżej, aby nie wyjść z zakresu | |
78 | if type == 1: | |
79 | suffix = number[len_2-1] | |
80 | if type == 2: | |
81 | suffix = number[len_2-2] + number[len_2-1] | |
82 | if type == 3: | |
83 | suffix = number[-3:-1] + number[len_2-1] | |
84 | if type == 4: | |
85 | suffix = number[-4:-1] + number[len_2-1] | |
86 | ||
87 | ## ustalenie prefixu | |
88 | prefix = "" | |
89 | i = 0 | |
90 | while i < len_2 - type: | |
91 | prefix += number[i] | |
92 | print (prefix) | |
93 | i += 1 | |
94 | ||
95 | ##ostateczna wartość z finalnym uwzględnieniem znaku | |
96 | value = float(prefix+'.'+suffix) | |
97 | if sign == 1: | |
98 | value = value * (-1) | |
99 | return value |