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 |