Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

      • 简介
      • 进制转换工具类-RadixUtil
        • 📚 介绍
          • 设计理念
        • 🔧 核心方法详解
          • 1. 进制编码
          • encode(long value, String chars)
          • 2. 进制解码
          • decodeToInt(String value, String chars)
          • decode(String value, String chars)
        • 🚀 综合示例
          • 示例1:自定义进制转换
          • 示例2:实现Base62编码
          • 示例3:进制转换应用 - 生成短链接
        • 🎯 设计优势
        • 📌 注意事项
        • 🚀 总结
      • Hex工具类-HexUtil
      • 哈希工具类-HashUtil
    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 编码解码(codec)
Hutool
2026-01-03
目录

进制转换工具类-RadixUtil

# 📚 介绍

RadixUtil 是 Hutool 核心模块中的进制转换工具类,可以实现任意进制之间的转换,为 Java 开发者提供了便捷的进制转换解决方案。

# 设计理念

  • 任意进制:支持自定义进制字符集,实现任意进制之间的转换
  • 简单易用:提供简洁的 API,一行代码即可完成进制转换
  • 高性能:底层实现经过优化,性能优异
  • 线程安全:所有方法都是线程安全的,可以在多线程环境下安全使用

# 🔧 核心方法详解

# 1. 进制编码

# encode(long value, String chars)

功能:把一个整型数值转换成自定义进制

参数:

  • value:要转换的数值
  • chars:进制字符集,不同的字符代表不同的进制位

返回值:转换后的进制字符串

示例:

// 使用默认的62进制字符集(0-9a-zA-Z)
String base62 = RadixUtil.encode(123456, RadixUtil.BASE_CHARSET);
Console.log(base62); // 2n9

// 自定义进制字符集
String customRadix = RadixUtil.encode(123456, "abcdefghijklmnopqrstuvwxyz");
Console.log(customRadix); // dnhlz

# 2. 进制解码

# decodeToInt(String value, String chars)

功能:把转换后的进制字符还原成int值

参数:

  • value:要转换的进制字符串
  • chars:进制字符集

返回值:转换后的int值

示例:

// 解码62进制字符串
int value1 = RadixUtil.decodeToInt("2n9", RadixUtil.BASE_CHARSET);
Console.log(value1); // 123456

// 解码自定义进制字符串
int value2 = RadixUtil.decodeToInt("dnhlz", "abcdefghijklmnopqrstuvwxyz");
Console.log(value2); // 123456

# decode(String value, String chars)

功能:把转换后的进制字符还原成long值

参数:

  • value:要转换的进制字符串
  • chars:进制字符集

返回值:转换后的long值

示例:

// 解码62进制字符串为long
long value = RadixUtil.decode("2n9", RadixUtil.BASE_CHARSET);
Console.log(value); // 123456

// 解码大数值
String largeNum = RadixUtil.encode(Long.MAX_VALUE, RadixUtil.BASE_CHARSET);
long decodedLargeNum = RadixUtil.decode(largeNum, RadixUtil.BASE_CHARSET);
Console.log(decodedLargeNum); // 9223372036854775807

# 🚀 综合示例

# 示例1:自定义进制转换

public void customRadixTest() {
    // 定义自定义进制字符集(只使用数字和小写字母)
    String customChars = "0123456789abcdefghijklmnopqrstuvwxyz";

    // 要转换的数值
    long num = 123456789L;

    // 编码为自定义进制
    String encoded = RadixUtil.encode(num, customChars);
    Console.log("编码结果:" + encoded); // 21i3v9

    // 解码回原值
    long decoded = RadixUtil.decode(encoded, customChars);
    Console.log("解码结果:" + decoded); // 123456789

    // 验证编码解码是否正确
    Assert.assertEquals(num, decoded);
}

# 示例2:实现Base62编码

public void base62Test() {
    // Base62编码就是使用0-9a-zA-Z作为字符集
    String base62Chars = RadixUtil.BASE_CHARSET;

    // 编码
    String base62 = RadixUtil.encode(123456, base62Chars);
    Console.log("Base62编码:" + base62); // 2n9

    // 解码
    long decoded = RadixUtil.decode(base62, base62Chars);
    Console.log("Base62解码:" + decoded); // 123456
}

# 示例3:进制转换应用 - 生成短链接

public void shortUrlTest() {
    // 假设我们有一个长URL对应的ID
    long urlId = 123456789L;

    // 使用62进制转换生成短链接标识
    String shortCode = RadixUtil.encode(urlId, RadixUtil.BASE_CHARSET);
    Console.log("短链接标识:" + shortCode); // 8m0k

    // 当用户访问短链接时,解码得到原始ID
    long decodedId = RadixUtil.decode(shortCode, RadixUtil.BASE_CHARSET);
    Console.log("解码得到的URL ID:" + decodedId); // 123456789

    // 根据ID查询数据库,获取原始URL
    // String originalUrl = urlService.getUrlById(decodedId);
}

# 🎯 设计优势

  1. 灵活定制:支持自定义进制字符集,可以根据需求实现任意进制的转换
  2. 高性能:底层使用位运算和查表法,性能优异
  3. 简单易用:提供简洁的API,一行代码即可完成进制转换
  4. 线程安全:所有方法都是线程安全的,可以在多线程环境下安全使用
  5. 支持大数值:支持long类型的数值转换,可以处理较大的数值

# 📌 注意事项

  1. 字符集唯一性:自定义字符集的字符必须唯一,否则会导致解码错误
  2. 字符集长度:字符集的长度决定了进制数,例如字符集长度为62,则表示62进制
  3. 数值范围:对于int类型的解码,要注意数值不能超过int的范围(-2^31到2^31-1)
  4. 大小写敏感:默认字符集是大小写敏感的,"A"和"a"代表不同的进制位
  5. 空值处理:输入参数为null时会抛出NullPointerException,需要注意处理

# 🚀 总结

RadixUtil 是一个功能强大、使用便捷的进制转换工具类,为 Java 开发者提供了灵活的进制转换解决方案。它支持自定义进制字符集,可以实现任意进制之间的转换,适用于各种进制转换场景,如短链接生成、自定义ID生成等。

通过合理使用 RadixUtil,可以简化进制转换的开发工作,提高开发效率,同时保证转换的准确性和性能。

简介
Hex工具类-HexUtil

← 简介 Hex工具类-HexUtil→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式