SORU
13 Temmuz 2009, PAZARTESİ


Temel 62 dönüşüm Python

Nasıl taban 62 için bir tamsayı dönüştürmek istiyorsunuz (bu basamaklı onaltılık gibi, ama: '0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz').

Bunun için iyi bir Python Kütüphanesi bulmaya çalışıyorum, ama onlar tüm dönüştürme dizeleri ile meşgul gibi görünüyor. Python base64 modülü sadece dizeleri kabul eder ve dört karakter, tek haneli döner. Bir URL shorteners kullanmak ne benzer arıyordum.

CEVAP
13 Temmuz 2009, PAZARTESİ


Bunun için standart bir modül yok, ama benim kendi işlevleri elde etmek için yazdım.

ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

def base62_encode(num, alphabet=ALPHABET):
    """Encode a number in Base X

    `num`: The number to encode
    `alphabet`: The alphabet to use for encoding
    """
    if (num == 0):
        return alphabet[0]
    arr = []
    base = len(alphabet)
    while num:
        rem = num % base
        num = num // base
        arr.append(alphabet[rem])
    arr.reverse()
    return ''.join(arr)

def base62_decode(string, alphabet=ALPHABET):
    """Decode a Base X encoded string into the number

    Arguments:
    - `string`: The encoded string
    - `alphabet`: The alphabet to use for encoding
    """
    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

Bu kodlama ve kod çözme için kullanılacak herhangi bir Alfabe verebilirsiniz gerçeğine dikkat edin.

Bu yardımcı olur umarım.

PS - URL shorteners İçin, daha iyi 0Ol1oİ vb gibi birkaç kafa karıştırıcı bir karakter bırakmak olduğunu bulduk. Böylece URL kısaltma ihtiyaçlarımı - "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ" Bu alfabe kullanıyorum

İyi eğlenceler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Central

    Android Cent

    13 Kasım 2008
  • KRQE

    KRQE

    6 AĞUSTOS 2007
  • The Brister

    The Brister

    10 ŞUBAT 2008