小编典典

如何将整数转换为任何基数的字符串?

all

Python允许通过给定基数的字符串轻松创建整数

int(str, base).

我想执行相反的操作: 从整数创建字符串 ,即我想要一些函数int2base(num, base),例如:

int(int2base(x, b), b) == x

函数名/参数顺序并不重要。

对于任何可以接受的数字和基数xb``int()

这是一个易于编写的函数:实际上它比在这个问题中描述它更容易。但是,我觉得我一定错过了什么。

我知道函数bin, oct, hex,但由于以下几个原因我不能使用它们:

  • 这些功能在旧版本的 Python 上不可用,我需要与 (2.2) 兼容

  • 我想要一个通用的解决方案,可以针对不同的基础以相同的方式调用

  • 我想允许 2、8、16 以外的碱基


阅读 76

收藏
2022-05-06

共1个答案

小编典典

如果您需要与 Python
的古老版本兼容,您可以使用gmpy(它确实包含一个快速、完全通用的 int
到字符串转换功能,并且可以为此类古老版本构建 - 您可能需要尝试旧版本,因为最近的版本尚未针对古老的 Python 和 GMP
版本进行测试,只有最近的版本),或者,为了降低速度但更方便,使用 Python 代码——例如,对于 Python 2,最简单的:

import string
digs = string.digits + string.ascii_letters


def int2base(x, base):
    if x < 0:
        sign = -1
    elif x == 0:
        return digs[0]
    else:
        sign = 1

    x *= sign
    digits = []

    while x:
        digits.append(digs[int(x % base)])
        x = int(x / base)

    if sign < 0:
        digits.append('-')

    digits.reverse()

    return ''.join(digits)

对于 Python 3,int(x / base)会导致不正确的结果,必须更改为x // base

import string
digs = string.digits + string.ascii_letters


def int2base(x, base):
    if x < 0:
        sign = -1
    elif x == 0:
        return digs[0]
    else:
        sign = 1

    x *= sign
    digits = []

    while x:
        digits.append(digs[x % base])
        x = x // base

    if sign < 0:
        digits.append('-')

    digits.reverse()

    return ''.join(digits)
2022-05-06