小能豆

如何将整数转换为任意进制的字符串?

python

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

int(str, base). 

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

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

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

对于任何数字x和基数bint()可以接受。

这是一个很容易编写的函数:实际上,它比在这个问题中描述它更容易。但是,我觉得我一定遗漏了一些东西。

我知道这些功能bin,,,但由于以下几个原因,我无法使用它们octhex

  • 这些函数在旧版本的 Python 上不可用,我需要与旧版本的 Python 兼容(2.2)
  • 我想要一个通用的解决方案,可以以相同的方式调用不同的基础
  • 我想允许 2、8、16 以外的进制

阅读 45

收藏
2024-06-28

共1个答案

小能豆

您可以创建一个函数,使用基本算术和字符串运算将整数转换为任意给定进制的字符串表示形式。以下是适用于 2 到 36(含)之间的任何进制的通用解决方案:

def int2base(num, base):
    if base < 2 or base > 36:
        raise ValueError("Base must be between 2 and 36, inclusive.")

    # Handle the special case of zero
    if num == 0:
        return "0"

    digits = "0123456789abcdefghijklmnopqrstuvwxyz"
    result = ""
    sign = ""

    # Handle negative numbers for base 10
    if num < 0 and base == 10:
        sign = "-"
        num = -num

    while num > 0:
        result = digits[num % base] + result
        num = num // base

    return sign + result

# Example usage:
x = 255
b = 16
base_string = int2base(x, b)
print(base_string)  # Should print "ff"
print(int(base_string, b))  # Should print 255, confirming the round trip

解释:

  1. 基数检查:该函数首先检查基数是否在可接受的范围内(2 到 36)。如果不在,则引发ValueError
  2. 零情况:如果输入数字为零,函数立即返回"0"
  3. 数字字符串:定义一个包含最多 36 个基数的所有可能数字的字符串。此字符串可轻松从数值转换为其对应的字符表示。
  4. 负数处理:对于基数 10,如果数字为负数,则函数将使用变量单独处理符号sign
  5. 转换循环:主循环通过不断取余数(num % base)并更新结果字符串将数字转换为目标基数。然后在下一次迭代中将该数字除以基数(使用整数除法)。
  6. 结果组装:将可选的符号与转换后的数字组合,构成最终的结果字符串。

此函数确保与旧版本的 Python 兼容,并允许使用标准二进制、八进制和十六进制以外的进制。

2024-06-28