为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

暮色呼如 2019-06-20 15:21:23
如何将基中的整数转换为字符串?Python允许通过以下方式轻松地从给定基的字符串创建整数int(str, base).我想做相反的事情:从整数创建字符串,也就是我想要一些功能int2base(num, base),以便:int(int2base(x, b), b) == x函数名称/参数顺序不重要。任何数字x和基b那,那个int()会接受的。这是一个很容易编写的函数:实际上,它比在这个问题中描述它更容易。然而,我觉得我一定是错过了什么。我知道这些功能bin, oct, hex,但我不能使用它们有几个原因:这些函数在早期版本的Python上是不可用的,我需要与其兼容(2.2)。我想要一个通用的解决方案,在不同的基础上可以称为相同的方法。我想允许2,8,16以外的基地相关Python优雅的int反函数(String,base)python中使用递归的整数到基x系统Python中的基62转换如何将整数转换为Python中最短的url安全字符串?
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

如果您需要与Python的旧版本兼容,可以使用gmpy(它确实包括一个快速的、完全通用的int-string转换函数,并且可以为这样的古老版本构建-您可能需要尝试较早的版本,因为最近的版本还没有经过值得尊敬的Python和GMP版本的测试,只是最近的版本而已),或者,为了更低的速度但更方便,使用Python代码-例如,最简单的:

import string
digs = string.digits + string.ascii_lettersdef 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)


查看完整回答
反对 回复 2019-06-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

令人惊讶的是,人们只给出了转换成小基数的解决方案(比英文字母的长度要小)。没有人试图给出一个将任意基从2转换为无穷大的解。

下面是一个非常简单的解决方案:

def numberToBase(n, b):
    if n == 0:
        return [0]
    digits = []
    while n:
        digits.append(int(n % b))
        n //= b    return digits[::-1]

所以如果你需要把一些超大的数字转换成基地577,

numberToBase(67854 ** 15 - 102, 577),会给你一个正确的解决方案:[4, 473, 131, 96, 431, 285, 524, 486, 28, 23, 16, 82, 292, 538, 149, 25, 41, 483, 100, 517, 131, 28, 0, 435, 197, 264, 455],

之后,您可以将其转换为任何您想要的基础。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 507 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信