Skip to content

Instantly share code, notes, and snippets.

@jw910731
Created February 2, 2025 08:48
Show Gist options
  • Save jw910731/62e8627516de4fe5b4301ba8975b1c3e to your computer and use it in GitHub Desktop.
Save jw910731/62e8627516de4fe5b4301ba8975b1c3e to your computer and use it in GitHub Desktop.
易經 base64
GUA = [63, 0, 17, 34, 23, 58, 2, 16, 55, 59, 7, 56, 61, 47, 4, 8, 25, 38, 3, 48, 41, 37, 32, 1, 57, 39, 33, 30, 18, 45, 28, 14, 60, 15, 40, 5, 53, 43, 20, 10, 35, 49, 31, 62, 24, 6, 26, 22, 29, 46, 9, 36, 52, 11, 13, 44, 54, 27, 50, 19, 51, 12, 21, 42] # fmt: skip
def bit2gua(bit6: int) -> str:
return chr(0x4DC0 + GUA.index(bit6 & 0x3F))
def byte_segment(in_byte: bytes) -> bytearray:
ret: bytearray = []
rem = 0
reg = 0
for byte in in_byte:
mask = ((1 << (6 - rem)) - 1) << (2 + rem)
ps = (reg << (6 - rem)) | ((byte & mask) >> (2 + rem))
nreg = byte & (~mask & 0xFF)
ret.append(ps)
reg = nreg
rem += 2
if rem >= 6:
ret.append(reg)
reg = rem = 0
if reg != 0x00:
ret.append(reg << (6 - rem))
return ret
def main():
import sys
data = sys.stdin.buffer.read()
for gua in map(bit2gua, byte_segment(data)):
print(gua, end="")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment