pythonintegerhexbase32

Python: Integer to Base 32 hex (aka. Triacontakaidecimal)


Ok so going from Base 32 hex (aka. Triacontakaidecimal) to integer is pretty easy for example:

>>>int("v", 32)
31

How do you do it the other way around however? I was thinking of setting up a dictionary if a method doesn't exist to do so.

EDIT:

I actually got this working with the dictionary, the idea of my this method was to take a base 32 hex character and increment it if the LSB wasn't set to 1

>>> def incHex(hexChar):
...     intRep = int(hexChar, 32)
...     binRep = bin(intRep)
...     if(binRep[-1:]!='1'):
...         intRep += 1
...     convDict = {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:'A',11:'B',12:'C',
...                 13:'D',14:'E',15:'F',16:'G',17:'H',18:'I',19:'J',20:'K',21:'L',
...                 22:'M',23:'N',24:'O',25:'P',26:'Q',27:'R',28:'S',29:'T',30:'U',
...                 31:'V'}
...     return convDict[intRep]
...
>>> incHex('l')
'L'
>>> incHex('m')
'N'
>>>

Solution

  • A dictionary is probably a little bit of overkill for what you want to do. Why not just use a tuple:

    convTable = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V')
    

    That will make lookups faster while saving you memory as well.

    If you are just looking up integers in the range 0-31 then you can just do:

    getHex32Rep(val):
        return convTable[val]
    

    Also, you probably want to do:

    if(binRep[-1]!='1'):
    

    instead of

    if(binRep[-1:]!='1'):