2020-11-26 python 十进制转64进制

字符集:

table = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"

方法一: 求余和整除的方式

def b64(n: int) -> str:
    if n == 0:
        return "0"
    r = []
    while n > 0:
        r.append(table[n % 64])
        n //= 64
    return "".join(r[::-1])


print(b64(100))  # 1A

方法二:  先转二进制, 再转成64进制

def p64(n: int) -> str:
    s = bin(n)[2:][::-1]
    return "".join([table[int(s[i : i + 6][::-1], 2)] for i in range(0, len(s), 6)][::-1])


print(p64(100))  # 1A

64进制转10进制:

T_MAP = {s: i for i, s in enumerate(table)}

def d64(s: str, *, t_map: Dict[str, int] = T_MAP) -> int:
    i = 0
    for c in s:
        i = i * 64 + t_map[c]
    return i

聚合成类方法:

class DigitGame:
    chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"
    t_map = {s: i for i, s in enumerate(chars)}

    @classmethod
    def hex_compress(cls, s: str) -> str:
        """十六进制转64进制

        Usage::
            >>> DigitGame.hex_compress('aef01ABCDE')
            'aXM6HPu'
        """
        return cls.b64(int(s, 16))

    @classmethod
    def hex_decompress(cls, s: str, upper=True) -> str:
        """64进制转十六进制

        Usage::
            >>> DigitGame.hex_decompress('aXM6HPu')
            'AEF01ABCDE'
        """
        t = hex(cls.d64(s))[2:]
        if upper:
            t = t.upper()
        return t

    @classmethod
    def b64(cls, n: int) -> str:
        """十进制转64进制

        Usage::
            >>> DigitGame.b64(1000)
            'fE'
        """
        s = bin(n)[2:][::-1]
        return "".join(
            [cls.chars[int(s[i : i + 6][::-1], 2)] for i in range(0, len(s), 6)][::-1]
        )

    @classmethod
    def b64_readable(cls, n: int) -> str:
        """十进制转64进制

        Usage::
            >>> DigitGame.b64_readable(1000)
            'fE'
        """
        if n == 0:
            return "0"
        r = []
        while n > 0:
            r.append(cls.chars[n % 64])
            n //= 64
        return "".join(r[::-1])

    @classmethod
    def d64(cls, s: str) -> int:
        """64进制转十进制

        Usage::
            >>> DigitGame.d64('fE')
            1000
        """
        i = 0
        for c in s:
            i = i * 64 + cls.t_map[c]
        return i

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 7-6 jmu-python-不同进制数 在计算机中,数字可以用不同的进制表示。常见的进制有二进制、八进制十进制和十六进制。 二进制是计算机中最基本的进制,只有和1两个数字。八进制是以8为基数的进制,数字由-7组成。十进制是我们平时使用的进制,数字由-9组成。十六进制是以16为基数的进制,数字由-9和A-F组成。 在Python中,可以使用不同的前缀来表示不同的进制。二进制使用b或B前缀,八进制使用o或O前缀,十六进制使用x或X前缀。 例如,二进制数1011可以表示为b1011或B1011,八进制数23可以表示为o23或O23,十六进制数AB可以表示为xAB或XAB。 在Python中,可以使用int()函数将不同进制的字符串换为十进制数,也可以使用bin()、oct()、hex()函数将十进制换为二进制、八进制、十六进制字符串。 ### 回答2: 7-6 jmu-python-不同进制数 在计算机科学中,进制是十分重要的基础概念,同时也是一个容易引起误解的容易混淆的概念。所谓进制,就是用不同的符号来表示数字的位置、权值和位值。在我们日常使用中,最常见的是十进制。而在计算机中,除了十进制之外,还可以使用二进制、八进制和十六进制等不同的进制数来表示数字。 二进制(Binary) 二进制是计算机中最基本的进制,只有0和1两个数码,这是由于计算机中采用的是模拟现象来进行信息存储和处理。因此,只需要用0和1两种状态进行表示即可。例如,8位二进制数00000000表示数字0,11111111表示数字255。 八进制(Octal) 八进制是一种使用8个数字来进行编码的进制。在计算机科学中,八进制通常被用于Unix和Linux文件系统中的文件访问权限描述。在八进制中,数字由0到7的8个数码组成。例如数字78,在八进制中写作116(因为7×8的一次方加上8的零次方等于116),这就是为什么它被称为八进制。八进制一般使用前缀0来表示。 十六进制(Hexadecimal) 十六进制是一种使用16个数字来进行编码的进制。在计算机科学中,十六进制通常被用于颜色编码和内存地址表示。在十六进制中,数字由0到9和字母A到F(或a到f)的16个数码组成。为了便于区分,通常采用前缀0x来表示十六进制。例如数字256,在十六进制中写作0x100(因为256等于16的二次方)。 综上所述,不同进制数在计算机科学中有各自的应用,同时也提供了不同的方式来表示数字。对于程序员来说,熟练掌握各种进制数的概念和换方法具有至关重要的意义。 ### 回答3: 7-6 jmu-python-不同进制数 在计算机科学中,我们经常使用不同的进制数来表达数字和数据。在Python中,我们可以使用不同的进制数来表示整数和浮点数。本文将介绍在Python中使用的不同进制数类型和如何将它们化成十进制数。 一、二进制数 二进制是计算机语言中的基本进制。二进制数由0和1表示,是由计算机电路中硬件元件关系(电子电路)的最小单位表示的信息。在Python中,我们可以使用前缀“0b”来表示二进制数,例如: >>> a = 0b1010 >>> print(a) 10 >> b = 0b1101 >> print(b) 13 在上面的例子中,我们使用“0b”前缀来表示二进制数,然后将其赋值给变量a和变量b。最后,我们使用print()函数输出了它们在十进制下的值。 二、八进制数 八进制数是由0~7数字组成的数字系统。在Python中,我们可以使用前缀“0o”来表示八进制数,例如: >>> a = 0o10 >>> print(a) 8 >> b = 0o17 >> print(b) 15 在上面的例子中,我们使用“0o”前缀来表示八进制数,然后将其赋值给变量a和变量b。最后,我们使用print()函数输出了它们在十进制下的值。 三、十六进制数 十六进制数是由0~9和字母A~F组成的数字系统。在Python中,我们可以使用前缀“0x”来表示十六进制数,例如: >>> a = 0x10 >>> print(a) 16 >> b = 0xAB >> print(b) 171 在上面的例子中,我们使用“0x”前缀来表示十六进制数,然后将其赋值给变量a和变量b。最后,我们使用print()函数输出了它们在十进制下的值。 四、十进制十进制数是我们最常使用的数字系统,由0~9数字组成。在Python中,我们可以直接使用整数或浮点数来表示十进制数,例如: >>> a = 10 >>> print(a) 10 >> b = 3.14 >> print(b) 3.14 在上面的例子中,我们直接使用整数10和浮点数3.14来表示十进制数,然后通过print()函数输出它们的值。 五、不同进制数之间的化 如果我们想要将一个二进制、八进制、十六进制化成十进制数,我们可以使用int()函数将其化成整数,例如: >>> a = 0b1010 >>> print(a) 10 >> b = 0o17 >> print(b) 15 >> c = 0xAB >> print(c) 171 >> d = int('1010', 2) >> print(d) 10 >> e = int('17', 8) >> print(e) 15 >> f = int('AB', 16) >> print(f) 171 在上面的例子中,我们使用int()函数将二进制数“0b1010”化成十进制数10,将八进制数“0o17”化成十进制数15,将十六进制数“0xAB”化成十进制数171。我们也可以使用int()函数对字符串进行化,其中第二个参数表示原来数字的进制。 综上所述,Python中的不同进制数可以用来表示整数和浮点数,它们之间可以互相化。掌握这些知识对于学习计算机科学领域的相关课程有很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值