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

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

Python允许通过以下方式轻松地从给定基的字符串创建整数

int(str, base).

我想做相反的事情:从整数创建字符串,也就是我想要一些功能int2base(num, base),以便:

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

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

任何数字x和基b那,那个int()会接受的。

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

我知道这些功能binocthex,但我不能使用它们有几个原因:

  • 这些函数在早期版本的Python上是不可用的,我需要与其兼容(2.2)。

  • 我想要一个通用的解决方案,在不同的基础上可以称为相同的方法。

  • 我想允许2,8,16以外的基地

相关


暮色呼如
浏览 549回答 3
3回答

胡子哥哥

如果您需要与Python的旧版本兼容,可以使用gmpy(它确实包括一个快速的、完全通用的int-string转换函数,并且可以为这样的古老版本构建-您可能需要尝试较早的版本,因为最近的版本还没有经过值得尊敬的Python和GMP版本的测试,只是最近的版本而已),或者,为了更低的速度但更方便,使用Python代码-例如,最简单的:import&nbsp;string digs&nbsp;=&nbsp;string.digits&nbsp;+&nbsp;string.ascii_lettersdef&nbsp;int2base(x,&nbsp;base): &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;x&nbsp;<&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign&nbsp;=&nbsp;-1 &nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;x&nbsp;==&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;digs[0] &nbsp;&nbsp;&nbsp;&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign&nbsp;=&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;*=&nbsp;sign &nbsp;&nbsp;&nbsp;&nbsp;digits&nbsp;=&nbsp;[] &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;x: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digits.append(digs[int(x&nbsp;%&nbsp;base)]) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;int(x&nbsp;/&nbsp;base) &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;sign&nbsp;<&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digits.append('-') &nbsp;&nbsp;&nbsp;&nbsp;digits.reverse() &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;''.join(digits)

慕村225694

令人惊讶的是,人们只给出了转换成小基数的解决方案(比英文字母的长度要小)。没有人试图给出一个将任意基从2转换为无穷大的解。下面是一个非常简单的解决方案:def&nbsp;numberToBase(n,&nbsp;b): &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;n&nbsp;==&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[0] &nbsp;&nbsp;&nbsp;&nbsp;digits&nbsp;=&nbsp;[] &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;n: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digits.append(int(n&nbsp;%&nbsp;b)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;//=&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;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],之后,您可以将其转换为任何您想要的基础。
打开App,查看更多内容
随时随地看视频慕课网APP