我试图在不使用int构造函数的情况下将表示十六进制数的字符串转换为python中的int。
例如,如果我被给予
hexstring = "802"
我如何才能
output = 2050
不做
int("802",16)
我该怎么做?
答案 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
(这是开头的初始总和)