在Python中没有Int构造函数的十六进制到Int

时间:2017-09-08 19:10:19

标签: python string hex string-parsing

我试图在不使用int构造函数的情况下将表示十六进制数的字符串转换为python中的int。

例如,如果我被给予

    hexstring = "802"

我如何才能

    output = 2050

不做

    int("802",16)

我该怎么做?

1 个答案:

答案 0 :(得分:2)

hexstring = "802"
L=len(hexstring)

def val(h_char):
    # Note you need to extend this to make sure the lowercase hex digits are processed properly
    return ord(h_char)- (55 if ord(h_char)>64 else 48)

def sumup(sum,idx):
    global hexstring # global variables are not recommended
    L=len(hexstring)
    return sum + 16**idx*val(hexstring[L-idx-1])

output = reduce(lambda a,b:sumup(a,b),range(L),0))  


以下只是对上述内容的解释,并未添加任何值
[0,1,2]生成的range(L)列表上的流程
对于上面列出的每个idx,函数调用都是sumup(sum, idx)=sum+16^idx*h_digit_at_idx。(上面^ is ** is exp

h_digit_at_idx = ord(h_char)- (55 if ord(h_char)>64 else 48)

ord(h_char)为十六进制字符生成48,49...57,65,66,67,68,69,70 0,1...10,A,B,C,D,E,F

ord(h_char)-(55 if ord(h_char)>64 else 48为各个字符生成0,1...10,11,12,13,14,15

最后reduce函数的最后一个参数是0(这是开头的初始总和)