Advertisement
martaczaska

decode_fragment

May 21st, 2021
929
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.65 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement