add the ulibs
This commit is contained in:
1 parent
150708564c
commit
f3982221a1
2 files changed
+85
No files matched your search
@@ -0,0 +1,55 @@
|
||||
class Base64:
|
||||
def __init__(self):
|
||||
# Base64 alphabet
|
||||
self.alphabet = (
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||
)
|
||||
|
||||
def encode(self, data: str) -> str:
|
||||
# Convert string to bytes and get binary representation
|
||||
binary = "".join([format(b, "08b") for b in data.encode()])
|
||||
|
||||
# Pad with zeros if necessary
|
||||
padding = len(binary) % 6
|
||||
if padding:
|
||||
binary += "0" * (6 - padding)
|
||||
|
||||
# Split into 6-bit chunks and convert to decimal
|
||||
chunks = [binary[i : i + 6] for i in range(0, len(binary), 6)]
|
||||
result = "".join(self.alphabet[int(chunk, 2)] for chunk in chunks)
|
||||
|
||||
# Add padding characters
|
||||
padding = len(data) % 3
|
||||
if padding:
|
||||
result += "=" * (3 - padding)
|
||||
|
||||
return result
|
||||
|
||||
def decode(self, data: str) -> str:
|
||||
# Remove padding characters
|
||||
data = data.rstrip("=")
|
||||
|
||||
# Convert to binary
|
||||
binary = "".join([format(self.alphabet.index(c), "06b") for c in data])
|
||||
|
||||
# Remove padding zeros
|
||||
padding = len(binary) % 8
|
||||
if padding:
|
||||
binary = binary[:-padding]
|
||||
|
||||
# Convert binary to bytes and then to string
|
||||
bytes_data = [int(binary[i : i + 8], 2) for i in range(0, len(binary), 8)]
|
||||
return bytes(bytes_data).decode()
|
||||
|
||||
|
||||
# Example usage
|
||||
def example():
|
||||
b64 = Base64()
|
||||
original = "Hello, World!"
|
||||
encoded = b64.encode(original)
|
||||
print(f"Original: {original}")
|
||||
print(f"Encoded: {encoded}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
example()
|
||||
Reference in new issue
Block a user