一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java中 BigInteger 怎么实现基数转换 如 10 进制转 36 进制

时间:2026-07-14 09:36:46 编辑:袖梨 来源:一聚教程网

BigInteger通过构造器BigInteger(String val, int radix)支持2–36进制字符串转十进制大整数,再通过toString(int radix)将十进制BigInteger转为指定进制小写字符串,天然支持负数,超出36进制需手动实现。

BigInteger 本身不直接提供像 toString(radix) 这样的实例方法(那是 IntegerLong 等基本类型包装类的),但它提供了静态方法 BigInteger.valueOf(long) 和构造器支持字符串解析,更重要的是——它有一个非常关键的构造器和一个配套的 toString() 方法,能直接完成任意进制(2–36)的转换。

用 BigInteger(String val, int radix) 解析任意进制字符串

这是“其他进制 → 十进制 BigInteger”的入口。比如把 36 进制字符串 "Z""100" 转成十进制大整数:

  • 构造器 new BigInteger("Z", 36) → 值为 35(因为 Z 是 36 进制中表示 35)
  • new BigInteger("100", 36) → 值为 36² = 1296
  • radix 必须在 2–36 之间,超出会抛 NumberFormatException

用 toString(int radix) 输出指定进制字符串

这是“十进制 BigInteger → 其他进制字符串”的核心方法。它返回小写字母 a–z 表示 10–35,符合标准惯例:

  • BigInteger.valueOf(1296).toString(36) → 返回 "100"
  • BigInteger.valueOf(35).toString(36) → 返回 "z"
  • 注意:结果是小写;如需大写,可调用 .toUpperCase()

处理负数和边界情况

BigInteger 的进制转换天然支持负数:

立即学习“Java免费学习笔记(深入)”;

  • new BigInteger("-abc", 16) 合法,解析为负的十进制值
  • BigInteger.valueOf(-1000).toString(36) 返回 "-rs"(小写带负号)
  • 空字符串、前导空格、无效字符(如 radix=36 时出现 'g')会抛异常

自定义更高基数?需手动实现

Java 内置仅支持 2–36(因字母只有 26 个 + 数字 10 个)。若需 62 进制(0–9 + a–z + A–Z),就得自己写转换逻辑:

  • divideAndRemainder() 反复取余,查表映射余数到字符
  • 注意顺序:余数是低位,需逆序拼接
  • 对零值单独处理,避免空结果

热门栏目