2021-05-20 08:28:00 +00:00
|
|
|
def hex_to_bin(hex_num: str) -> int:
|
|
|
|
"""
|
|
|
|
Convert a hexadecimal value to its binary equivalent
|
|
|
|
#https://stackoverflow.com/questions/1425493/convert-hex-to-binary
|
|
|
|
Here, we have used the bitwise right shift operator: >>
|
|
|
|
Shifts the bits of the number to the right and fills 0 on voids left as a result.
|
|
|
|
Similar effect as of dividing the number with some power of two.
|
|
|
|
Example:
|
|
|
|
a = 10
|
|
|
|
a >> 1 = 5
|
|
|
|
|
|
|
|
>>> hex_to_bin("AC")
|
|
|
|
10101100
|
|
|
|
>>> hex_to_bin("9A4")
|
|
|
|
100110100100
|
|
|
|
>>> hex_to_bin(" 12f ")
|
|
|
|
100101111
|
|
|
|
>>> hex_to_bin("FfFf")
|
|
|
|
1111111111111111
|
|
|
|
>>> hex_to_bin("-fFfF")
|
|
|
|
-1111111111111111
|
|
|
|
>>> hex_to_bin("F-f")
|
|
|
|
Traceback (most recent call last):
|
2022-10-27 17:42:30 +00:00
|
|
|
...
|
2021-05-20 08:28:00 +00:00
|
|
|
ValueError: Invalid value was passed to the function
|
|
|
|
>>> hex_to_bin("")
|
|
|
|
Traceback (most recent call last):
|
2022-10-27 17:42:30 +00:00
|
|
|
...
|
2021-05-20 08:28:00 +00:00
|
|
|
ValueError: No value was passed to the function
|
|
|
|
"""
|
|
|
|
|
|
|
|
hex_num = hex_num.strip()
|
|
|
|
if not hex_num:
|
|
|
|
raise ValueError("No value was passed to the function")
|
|
|
|
|
|
|
|
is_negative = hex_num[0] == "-"
|
|
|
|
if is_negative:
|
|
|
|
hex_num = hex_num[1:]
|
|
|
|
|
|
|
|
try:
|
|
|
|
int_num = int(hex_num, 16)
|
|
|
|
except ValueError:
|
|
|
|
raise ValueError("Invalid value was passed to the function")
|
|
|
|
|
|
|
|
bin_str = ""
|
|
|
|
while int_num > 0:
|
|
|
|
bin_str = str(int_num % 2) + bin_str
|
|
|
|
int_num >>= 1
|
|
|
|
|
|
|
|
return int(("-" + bin_str) if is_negative else bin_str)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
import doctest
|
|
|
|
|
|
|
|
doctest.testmod()
|