Python: целое число в шестнадцатеричном формате с основанием 32 (он же Triacontakaidecimal) - PullRequest
2 голосов
/ 14 июля 2011

Хорошо, поэтому переход от гексагона Base 32 (иначе Triacontakaidecimal) к целому числу довольно прост, например:

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

Как ты делаешь это наоборот? Я думал о настройке словаря, если для этого не существует метода.

EDIT:

Я действительно получил это, работая со словарем, идея моего метода this состояла в том, чтобы взять базовый шестнадцатеричный символ 32 и увеличить его, если LSB не был установлен в 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'
>>>

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Словарь, вероятно, немного излишним для того, что вы хотите сделать.Почему бы просто не использовать кортеж:

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')

Это ускорит поиск и сэкономит память.

Если вы просто просматриваете целые числа в диапазоне 0-31, тогда вы можетепросто сделайте:

getHex32Rep(val):
    return convTable[val]

Кроме того, вы, вероятно, хотите сделать:

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

вместо

if(binRep[-1:]!='1'):
2 голосов
/ 14 июля 2011

еще один способ сделать convDict

>>> import string
>>> convDict = {c:int(c,32) for c in (string.digits+string.ascii_lowercase)[:32]}
>>> convDict
{'1': 1, '0': 0, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8, 'a': 10, 'c': 12, 'b': 11, 'e': 14, 'd': 13, 'g': 16, 'f': 15, 'i': 18, 'h': 17, 'k': 20, 'j': 19, 'm': 22, 'l': 21, 'o': 24, 'n': 23, 'q': 26, 'p': 25, 's': 28, 'r': 27, 'u': 30, 't': 29, 'v': 31}
0 голосов
/ 14 июля 2011

Я нашел пакет numconv , который, кажется, обеспечивает это?

...