程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

  • 日期时间

  • IO流相关

  • 工具类

    • 字符串工具 - `StrUtil`
    • 16进制工具 - `HexUtil`
      • 1. 将字符串编码为十六进制字符串并解码回原始字符串
      • 2. 将字节数组转换为十六进制字符串并解码回字节数组
      • 3. 整数与十六进制字符串的转换
      • 4. 处理无效的十六进制字符串
    • 转义工具 - `EscapeUtil`
    • Hash算法工具 - `HashUtil`
    • URL 工具类 - `URLUtil`
    • XML 工具类 - `XmlUtil`
    • 对象工具类 - `ObjectUtil`
    • 反射工具类 - `ReflectUtil`
    • 泛型类型工具类 - `TypeUtil`
    • 分页工具类 - `PageUtil`
    • 剪贴板工具类 - `ClipboardUtil`
    • 类处理工具类 - `ClassUtil`
    • 枚举工具类 - `EnumUtil`
    • 命令行工具类 - `RuntimeUtil`
    • 数字工具类 - `NumberUtil`
    • 数组工具类 - `ArrayUtil`
    • 随机工具类 - `RandomUtil`
    • 唯一ID工具类 - `IdUtil`
    • 压缩工具类 - `ZipUtil`
    • 引用工具 - `ReferenceUtil`
    • 正则工具 - `ReUtil`
    • 身份证工具 - `IdcardUtil`
    • 信息脱敏工具 - `DesensitizedUtil`
    • 社会信用代码工具 - `CreditCodeUtil`
    • SPI 加载工具 - `ServiceLoaderUtil`
    • 字符编码工具 - `CharsetUtil`
    • 类加载工具 - `ClassLoaderUtil`
  • 语言特性

  • JavaBean

  • 集合类

  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • 工具类
scholar
2024-08-20
目录

16进制工具 - HexUtil

# 16进制工具 - HexUtil

简介

HexUtil 是 Hutool 提供的一个用于在字符串或字节数组与十六进制表示之间进行转换的工具类。十六进制(Hex)是一种常见的进制表示方法,广泛应用于计算机科学中,例如表示二进制数据、加密解密、编码转换等。HexUtil 提供了丰富的 API,使得十六进制处理变得简单且高效。


# 1. 将字符串编码为十六进制字符串并解码回原始字符串

在处理需要进行十六进制编码的数据时,HexUtil 提供了 encodeHexStr 和 decodeHexStr 方法,用于在字符串和十六进制表示之间进行转换。

示例代码:

import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.CharsetUtil;

public class HexUtilExample {
    public static void main(String[] args) {
        // 原始字符串
        String originalStr = "我是一个字符串";

        // 将字符串编码为十六进制字符串
        String hexStr = HexUtil.encodeHexStr(originalStr, CharsetUtil.CHARSET_UTF_8);
        System.out.println("编码后的十六进制字符串: " + hexStr);

        // 将十六进制字符串解码为原始字符串
        String decodedStr = HexUtil.decodeHexStr(hexStr, CharsetUtil.CHARSET_UTF_8);
        System.out.println("解码后的字符串: " + decodedStr);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

参数说明:

  • encodeHexStr(String data, Charset charset)

    • data:要编码的原始字符串,不能为 null。
    • charset:编码时使用的字符集(如 CharsetUtil.CHARSET_UTF_8),不能为 null。
    • 返回值:编码后的十六进制字符串。
  • decodeHexStr(String hexStr, Charset charset)

    • hexStr:要解码的十六进制字符串,不能为 null。
    • charset:解码时使用的字符集(如 CharsetUtil.CHARSET_UTF_8),不能为 null。
    • 返回值:解码后的原始字符串。

开发场景:

  • 在处理需要以十六进制表示的数据时,如加密数据、网络传输数据等,可以将字符串转换为十六进制表示,便于传输和存储。

# 2. 将字节数组转换为十六进制字符串并解码回字节数组

在处理二进制数据(如文件、图片、音频等)时,常常需要将字节数组转换为十六进制字符串进行存储或显示。HexUtil 提供了 encodeHex 和 decodeHex 方法,方便在字节数组和十六进制表示之间进行转换。

示例代码:

import cn.hutool.core.util.HexUtil;

public class HexUtilExample {
    public static void main(String[] args) {
        // 原始字节数组
        byte[] originalBytes = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};

        // 将字节数组编码为十六进制字符串
        String hexStr = HexUtil.encodeHexStr(originalBytes);
        System.out.println("编码后的十六进制字符串: " + hexStr);

        // 将十六进制字符串解码为字节数组
        byte[] decodedBytes = HexUtil.decodeHex(hexStr);
        System.out.println("解码后的字节数组: ");
        for (byte b : decodedBytes) {
            System.out.printf("0x%02X ", b);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

参数说明:

  • encodeHex(byte[] data)

    • data:要编码的字节数组,不能为 null。
    • 返回值:编码后的十六进制字符串。
  • decodeHex(String hexStr)

    • hexStr:要解码的十六进制字符串,不能为 null。
    • 返回值:解码后的字节数组。

开发场景:

  • 在处理图片、音频、视频等二进制文件时,通常需要将字节数据转换为十六进制字符串进行存储或显示。

# 3. 整数与十六进制字符串的转换

在某些场景下,整数需要以十六进制形式进行表示。HexUtil 提供了 toHex 和 fromHex 方法,方便将整数和十六进制字符串进行互转。

示例代码:

import cn.hutool.core.util.HexUtil;

public class HexUtilExample {
    public static void main(String[] args) {
        int number = 255;

        // 将整数转换为十六进制字符串
        String hexStr = HexUtil.toHex(number);
        System.out.println("整数 255 转换为十六进制字符串: " + hexStr); // 输出: ff

        // 将十六进制字符串转换为整数
        int num = HexUtil.fromHex(hexStr);
        System.out.println("十六进制字符串 'ff' 转换为整数: " + num); // 输出: 255
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

参数说明:

  • toHex(int number)

    • number:要转换为十六进制字符串的整数。
    • 返回值:整数的十六进制表示字符串。
  • fromHex(String hexStr)

    • hexStr:要转换为整数的十六进制字符串,不能为 null。
    • 返回值:十六进制字符串表示的整数。

开发场景:

  • 在网络协议、数据加密等场景中,整数的十六进制表示非常常见,可以通过这些方法进行方便的转换。

# 4. 处理无效的十六进制字符串

在使用 HexUtil 进行编码或解码时,可能会遇到无效的十六进制字符串,这时会抛出 UtilException 异常。通过捕获该异常,可以安全处理解码错误。

示例代码:

import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.util.HexUtil;

public class HexUtilExample {
    public static void main(String[] args) {
        String invalidHex = "XYZ";

        try {
            // 尝试解码无效的十六进制字符串
            byte[] bytes = HexUtil.decodeHex(invalidHex);
        } catch (UtilException e) {
            System.out.println("解码错误: 无效的十六进制字符串");
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

参数说明:

  • 在解码过程中,如果提供的十六进制字符串格式不正确,会抛出 UtilException,可以通过捕获此异常来处理解码错误。

开发场景:

  • 在处理用户输入的十六进制字符串或外部数据时,捕获解码异常可以确保程序的稳定性,防止因无效输入导致崩溃。

总结

HexUtil 工具类在处理十六进制字符串和字节数组的转换方面功能强大且易于使用。它为开发者提供了丰富的 API,适用于多种场景,如加密解密、编码转换、网络传输等,使得开发工作更加高效和可靠。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
字符串工具 - `StrUtil`
转义工具 - `EscapeUtil`

← 字符串工具 - `StrUtil` 转义工具 - `EscapeUtil`→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式