finished adding 48 bit int support
This commit is contained in:
+24
-13
@@ -12,30 +12,41 @@ class BinToInt(object):
|
||||
|
||||
def process(self, bin_string, reverse_marshalling=False):
|
||||
var = BitArray(bin_string)
|
||||
print(bin_string)
|
||||
chunked_bytes = [x for x in chunker(var, 8)]
|
||||
ordered_bytes = []
|
||||
for group in reversed(chunked_bytes) if reverse_marshalling else chunked_bytes:
|
||||
for group in chunked_bytes if reverse_marshalling else reversed(chunked_bytes):
|
||||
ordered_bytes.extend(group)
|
||||
ordered_bytes = [not x for x in reversed(ordered_bytes)]
|
||||
# print(
|
||||
# "".join(["1" if x else "0" for x in ordered_bytes[0:1]]),
|
||||
# "".join(["1" if x else "0" for x in ordered_bytes[1:1+self.exponent]]),
|
||||
# "".join(["1" if x else "0" for x in ordered_bytes[1+self.exponent:1+self.exponent+self.mantissa]])
|
||||
# )
|
||||
# sign =
|
||||
# return -val if sign else val
|
||||
ordered_bytes = [x for x in reversed(ordered_bytes)]
|
||||
|
||||
print([1 if x else 0 for x in ordered_bytes[:-1]])
|
||||
if self.signed:
|
||||
return self.convert_pos_int(ordered_bytes[:-1]) * (1 if False else -1)
|
||||
negative = ordered_bytes[-1]
|
||||
else:
|
||||
negative = False
|
||||
|
||||
# print([1 if x else 0 for x in ordered_bytes[:]])
|
||||
if self.signed:
|
||||
return self.convert_pos_int(ordered_bytes[:], negative)
|
||||
else:
|
||||
return self.convert_pos_int(ordered_bytes)
|
||||
|
||||
def convert_pos_int(self, val):
|
||||
def convert_unsigned_int(self, val):
|
||||
total_val = 0
|
||||
digit_val = 1
|
||||
for i in val:
|
||||
total_val += digit_val if i else 0
|
||||
digit_val *= 2
|
||||
return total_val
|
||||
|
||||
def convert_pos_int(self, val, negative):
|
||||
if negative:
|
||||
val = [not x for x in val]
|
||||
self.add_one_to_binary_int(val)
|
||||
return self.convert_unsigned_int(val) * (-1 if negative else 1)
|
||||
|
||||
def add_one_to_binary_int(self, binary_list):
|
||||
for i in range(len(binary_list)):
|
||||
if binary_list[i]:
|
||||
binary_list[i] = 0
|
||||
else:
|
||||
binary_list[i] = 1
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user