[解決済み] 62進数変換
2022-11-16 23:19:01
質問
整数をどのように62進数(16進数のように、しかしこれらの数字で: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')に変換するのでしょうか。
私はそのための良いPythonライブラリを見つけようとしましたが、それらはすべて文字列を変換することで占められているようです。Python base64 モジュールは文字列しか受け付けず、1 つの桁を 4 文字に変換します。私は、URL短縮ツールが使用するものに類似したものを探していました。
どのように解決するのですか?
標準のモジュールはありませんが、自作の関数で実現しました。
BASE62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
def encode(num, alphabet):
"""Encode a positive number into Base X and return the string.
Arguments:
- `num`: The number to encode
- `alphabet`: The alphabet to use for encoding
"""
if num == 0:
return alphabet[0]
arr = []
arr_append = arr.append # Extract bound-method for faster access.
_divmod = divmod # Access to locals is faster.
base = len(alphabet)
while num:
num, rem = _divmod(num, base)
arr_append(alphabet[rem])
arr.reverse()
return ''.join(arr)
def decode(string, alphabet=BASE62):
"""Decode a Base X encoded string into the number
Arguments:
- `string`: The encoded string
- `alphabet`: The alphabet to use for decoding
"""
base = len(alphabet)
strlen = len(string)
num = 0
idx = 0
for char in string:
power = (strlen - (idx + 1))
num += alphabet.index(char) * (base ** power)
idx += 1
return num
エンコードとデコードに使用するアルファベットを任意に指定できることに注意してください。もし
alphabet
引数を省略した場合、最初の行で定義された 62 文字のアルファベットを取得することになり、したがって 62 ベースのエンコード/デコードを行うことになります。
これが役立つことを願っています。
PS - URL 短縮プログラムでは、0Ol1oI などの紛らわしい文字は使わない方が良いことがわかりました。したがって、私は URL 短縮の必要性からこのアルファベットを使用しています。
"23456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
楽しんでください。
関連
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン