mirror of
https://github.com/TheAlgorithms/Python.git
synced 2026-09-28 13:33:11 +08:00
Added base64 to binary conversion. (#12209)
* Added base64 to binary conversion. * updating DIRECTORY.md --------- Co-authored-by: Christian Clauss <cclauss@me.com> Co-authored-by: cclauss <cclauss@users.noreply.github.com>
This commit is contained in:
co-authored by
Christian Clauss
cclauss
parent
7980a14f30
commit
165f7ea86f
@@ -208,6 +208,7 @@
|
||||
|
||||
## [Conversions](conversions)
|
||||
* [Astronomical Length Scale Conversion](conversions/astronomical_length_scale_conversion.py)
|
||||
* [Base64 To Binary](conversions/base64_to_binary.py)
|
||||
* [Binary To Decimal](conversions/binary_to_decimal.py)
|
||||
* [Binary To Excess3](conversions/binary_to_excess3.py)
|
||||
* [Binary To Gray](conversions/binary_to_gray.py)
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
"""
|
||||
* Author: Siddharth Singh (https://github.com/coolsidd)
|
||||
* Description: Convert a binary string to Base64.
|
||||
References for better understanding:
|
||||
https://en.wikipedia.org/wiki/Base64
|
||||
"""
|
||||
|
||||
B64_TO_BITS = {
|
||||
"A": "000000",
|
||||
"B": "000001",
|
||||
"C": "000010",
|
||||
"D": "000011",
|
||||
"E": "000100",
|
||||
"F": "000101",
|
||||
"G": "000110",
|
||||
"H": "000111",
|
||||
"I": "001000",
|
||||
"J": "001001",
|
||||
"K": "001010",
|
||||
"L": "001011",
|
||||
"M": "001100",
|
||||
"N": "001101",
|
||||
"O": "001110",
|
||||
"P": "001111",
|
||||
"Q": "010000",
|
||||
"R": "010001",
|
||||
"S": "010010",
|
||||
"T": "010011",
|
||||
"U": "010100",
|
||||
"V": "010101",
|
||||
"W": "010110",
|
||||
"X": "010111",
|
||||
"Y": "011000",
|
||||
"Z": "011001",
|
||||
"a": "011010",
|
||||
"b": "011011",
|
||||
"c": "011100",
|
||||
"d": "011101",
|
||||
"e": "011110",
|
||||
"f": "011111",
|
||||
"g": "100000",
|
||||
"h": "100001",
|
||||
"i": "100010",
|
||||
"j": "100011",
|
||||
"k": "100100",
|
||||
"l": "100101",
|
||||
"m": "100110",
|
||||
"n": "100111",
|
||||
"o": "101000",
|
||||
"p": "101001",
|
||||
"q": "101010",
|
||||
"r": "101011",
|
||||
"s": "101100",
|
||||
"t": "101101",
|
||||
"u": "101110",
|
||||
"v": "101111",
|
||||
"w": "110000",
|
||||
"x": "110001",
|
||||
"y": "110010",
|
||||
"z": "110011",
|
||||
"0": "110100",
|
||||
"1": "110101",
|
||||
"2": "110110",
|
||||
"3": "110111",
|
||||
"4": "111000",
|
||||
"5": "111001",
|
||||
"6": "111010",
|
||||
"7": "111011",
|
||||
"8": "111100",
|
||||
"9": "111101",
|
||||
"+": "111110",
|
||||
"/": "111111",
|
||||
}
|
||||
|
||||
|
||||
def base64_to_bin(base64_str: str) -> str:
|
||||
"""Convert a base64 value to its binary equivalent.
|
||||
|
||||
>>> base64_to_bin("ABC")
|
||||
'000000000001000010'
|
||||
>>> base64_to_bin(" -abc ")
|
||||
'-011010011011011100'
|
||||
>>> base64_to_bin(" a-bc ")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Invalid base64 string. Invalid char - at pos 1
|
||||
>>> base64_to_bin("")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Empty string was passed to the function
|
||||
"""
|
||||
b64_str = str(base64_str).strip()
|
||||
if not b64_str:
|
||||
raise ValueError("Empty string was passed to the function")
|
||||
is_negative = b64_str[0] == "-"
|
||||
if is_negative:
|
||||
b64_str = b64_str[1:]
|
||||
bin_str = ""
|
||||
for i, x in enumerate(b64_str):
|
||||
if x not in B64_TO_BITS:
|
||||
exception_message = f"Invalid base64 string. Invalid char {x} at pos {i}"
|
||||
raise ValueError(exception_message)
|
||||
bin_str += B64_TO_BITS[x]
|
||||
if is_negative:
|
||||
bin_str = "-" + bin_str
|
||||
return bin_str
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
Reference in New Issue
Block a user