Java字节数组转化成十六进制工具类

本文介绍了一个实用的方法,用于将字节数组转换为十六进制字符串表示形式。通过提供Java代码示例,详细展示了如何实现这一转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * Created by lzc on 2017-12-18.
 * 字节数组转换成十六进制
 */

public class byteArrayToHex {

    private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};

    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n = 256 + n;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    public static String byteArrayToHexString(byte[] b){
        StringBuilder resultSb = new StringBuilder();
        for (int i = 0; i < b.length;i++){
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
}
### Java 中将十六进制数据换为字符串的方法 在 Java 中,可以利用 `String` 类的构造函数或者通过手动解析的方式实现十六进制数据到字符串的换。以下是具体方法: #### 方法一:使用 String 构造器 可以通过将字节数组传递给 `String` 的构造函数来完成换。由于十六进制表示的是字节流,因此需要先将其从十六进制字符串字节数组。 ```java import java.nio.charset.StandardCharsets; public class HexToString { public static void main(String[] args) { // 输入的十六进制字符串 String hexStr = "ff010003008a83"; // 将十六进制字符串换为字节数组 byte[] byteArray = hexStringToByteArray(hexStr); // 使用指定编码方式(如 UTF-8)将字节数组换为字符串 String result = new String(byteArray, StandardCharsets.UTF_8); System.out.println(result); // 输出结果可能因编码不同而异 } private static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { // 将每两位十六进制化为一个字节 data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } } ``` 上述代码实现了将十六进制字符串 `"ff010003008a83"` 换为对应的字节数组,并进一步通过指定编码(这里使用 UTF-8 编码[^1])将其解码为字符串。 --- #### 方法二:逐字符处理并拼接 如果希望更灵活地控制每个字节的解释过程,则可以选择逐字符读取并构建最终字符串。 ```java public class HexToStringManual { public static void main(String[] args) { // 输入的十六进制字符串 String hexStr = "ff010003008a83"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < hexStr.length(); i += 2) { // 提取每两个字符作为一组 String strByte = hexStr.substring(i, i + 2); // 将其换为整数值后再为字符 char ch = (char) Integer.parseInt(strByte, 16); sb.append(ch); } String result = sb.toString(); System.out.println(result); // 输出结果取决于原始数据的实际含义 } } ``` 此方法适用于某些场景下需要单独分析每个字节的情况。注意,部分字节可能无法映射至合法的 Unicode 字符集范围,这可能导致异常或不可见字符输出。 --- #### 关键点说明 1. **十六进制字节的关系** 每个十六进制字符代表 4 bit 数据,因此两个连续的十六进制字符构成一个完整的字节[^2]。 2. **编码的影响** 不同的编码方式会改变相同字节序列所表现出来的字符串形式。例如,在 ASCII 或 ISO-8859-1 下,单字节可以直接对应某个特定字符;而在 UTF-8 下则需考虑多字节组合规则[^1]。 3. **BigInteger 辅助工具** 如果涉及大数运算或其他特殊需求时,可借助 `BigInteger` 来简化操作流程[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值