pybitcointools源码分析之进制转换

来源:互联网 发布:怎样迫使淘宝店铺停业 编辑:程序博客网 时间:2024/05/21 06:39

这部分是一些基本的操作函数。

data = [            [10, '65535', 16, 'ffff'],            [16, 'deadbeef', 10, '3735928559']        ]        #测试        for prebase, preval, postbase, postval in data:            self.assertEqual(changebase(preval, prebase, postbase), postval)

changebase的功能简单易懂,

prebase进制的preval,经过changebase转换成postbase进制后,结果等于postval。

进入函数里面看看,

    def changebase(string, frm, to, minlen=0):        if frm == to:            return lpad(string, get_code_string(frm)[0], minlen)        return encode(decode(string, frm), to, minlen)

decode函数是把字符串形式表示的数字转换成整型,比如这个例子中的’65535’转换成整数65535。

实现原理也比较好理解,

def decode(string, base):    base = int(base)    code_string = get_code_string(base)    result = 0    if base == 16:        string = string.lower()    while len(string) > 0:        result *= base        result += code_string.find(string[0])        string = string[1:]    return result

encode函数执行实际的转换工作,

    def encode(val, base, minlen=0):        base, minlen = int(base), int(minlen)        code_string = get_code_string(base)        result = ""        while val > 0:            result = code_string[val % base] + result            val //= base        return code_string[0] * max(minlen - len(result), 0) + result

encode通过mod操作进行进制转换。最后一行是进行补位的,通过左补0把结果补到minlen指定的长度。