View difference between Paste ID: pUmwUA2D and e9cRXyCv
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