-
Notifications
You must be signed in to change notification settings - Fork 0
/
__util.py
63 lines (50 loc) · 1.88 KB
/
__util.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import binascii
import logging
from __constants import HEX_AND_BINARY
from encoding_exception import EncodingException
class Util:
@staticmethod
def convert_hex_to_binary(hex_value) -> str:
hex_uppercase = hex_value.upper()
return HEX_AND_BINARY.get(hex_uppercase)
@staticmethod
def convert_message_to_binary(message, result='') -> str:
message_in_bytes = bytes(message, encoding='utf-8')
message_in_hex_string = str(binascii.hexlify(message_in_bytes))
message_in_hex_substring = message_in_hex_string[2:len(message_in_hex_string) - 1]
for hex_value in message_in_hex_substring:
result += Util.convert_hex_to_binary(hex_value)
return result
@staticmethod
def convert_binary_to_message(binary) -> str:
binary_length = len(binary)
message = ''
for byte_index in range(binary_length // 8):
ordinal = int(binary[byte_index * 8: byte_index * 8 + 8], 2)
char = chr(ordinal)
message += char
return message
@staticmethod
def calculate_sector_length(values) -> int:
if len(values) < 2:
raise EncodingException("Invalid length!")
sector_length = values[0] - values[1]
if sector_length < 0:
sector_length *= -1
if sector_length <= 1:
sector_length = 2
logging.info(f"Calculated sector length: {sector_length}")
return sector_length
@staticmethod
def calculate_sectors(values, length):
sectors = []
for value in values:
if len(sectors) < 1:
sectors.append([value])
continue
last_sector = sectors[len(sectors) - 1]
if len(last_sector) < length:
sectors[len(sectors) - 1].append(value)
continue
sectors.append([value])
return sectors