Python中的十六进制到Int无Int构造函数

Python中的十六进制到Int无Int构造函数,python,string,hex,string-parsing,Python,String,Hex,String Parsing,我试图在python中将表示十六进制数的字符串转换为int,而不使用int构造函数 例如,如果给我 hexstring = "802" 我怎么会这样呢 output = 2050 不做 int("802",16) 我该怎么办 hexstring = "802" L=len(hexstring) def val(h_char): # Note you need to extend this to make sure the lowercase hex dig

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

例如,如果给我

    hexstring = "802"
我怎么会这样呢

    output = 2050
不做

    int("802",16)
我该怎么办

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))  
下面只是对上述内容的解释,没有任何附加值 rangeL生产的[0,1,2]列表上的进程。 对于上面列表中的每个idx,函数调用为sumupsum,idx=sum+16^idx*h_digit_at_idx.^is**是上面的exp 如果ordh_char>64,则h_digit_at_idx=ordh_char-55,否则为48

ordh_char为十六进制字符0,1…10、A、B、C、D、E、F生成48,49…57,65,66,67,68,69,70

如果ordh_char>64,则ordh_char-55,否则48为各自的字符生成0,1…10,11,12,13,14,15


最后,函数的最后一个参数是0,这是开始时的初始和

为什么需要避免int?@chepner:常见的家庭作业问题,有一个约束条件可以防止琐碎的答案。你可以自己做int的工作,即将802解析为2*1+0*16+8*256的组成部分。对于范围为0的i,:if hexi[2:]==hexstring:return i-开玩笑,不要这样做。一种方法是使用这个列表的值:奇怪的数字=[ordx for x in hexdigits],可能与ord'0'和ord'a'和/或ord'a'的值有关……很好,是的,我的解决方案在将字符串转换为[0,16]中的整数列表后使用了类似16*a+b的减数器使用类似的ord技巧。如果小写字母作为十六进制数字输入,也会产生不可靠的结果。我希望OP可以编辑语句,为小写十六进制数字添加额外的条件。