1. 対象データの先頭に0が続く場合、0以外になるまでそのバイトを除外(e.g. 最初の3バイトが全て0の場合は、先頭の3バイトを除外)
2. 1の結果を58で割る
3. 剰余をBase58に変換
4. 変換された剰余を連結し、1で除外した0の数だけ先頭に1を連結
import sys import re matrix = list('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz') pattern=r"^(00)*" for line in sys.stdin: target = line.rstrip('\n') match = re.match(pattern, target) zeros=match.group() target = target.lstrip(zeros) q = int(target, 16) r = 0 b58str = '' while q > 0: q, r = divmod(q, 58) b58str = matrix[r] + b58str print(zeros.replace('00', '1') + b58str)
$ echo 0001ab | python3 base58encode.py
18N