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

  • LiquidMusick

    LiquidMusick

    23 Aralık 2010
  • Machinima

    Machinima

    17 Ocak 2006
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006