Java byte[] 和 HexString 互转

当我们解析通信协议或者16进制文件,java程序一般会把内容转换成byte[],就会涉及到字符和数组的转换。查了很多资料,有很多大神写了解决此问题的方法,但是现在根据我的实际情况,站在巨人的肩膀上,进行了一些修改。目前,toHexString()和toArrayByte()这两个方法相互转换是不会修改原来的byte[]内容。
/**
     * To byte array byte [ ].
     *
     * @param hexString the hex string
     * @return the byte [ ]
     */
    public static byte[] toByteArray(String hexString) {
        if (StringUtils.isEmpty(hexString))
            return null;
        hexString = hexString.toLowerCase();
        final byte[] byteArray = new byte[hexString.length() >> 1];
        int index = 0;
        for (int i = 0; i < hexString.length(); i++) {
            if (index  > hexString.length() - 1)
                return byteArray;
            byte highDit = (byte) (Character.digit(hexString.charAt(index), 16) & 0xFF);
            byte lowDit = (byte) (Character.digit(hexString.charAt(index + 1), 16) & 0xFF);
            byteArray[i] = (byte) (highDit << 4 | lowDit);
            index += 2;
        }
        return byteArray;
    }


    /**
     * byte[] to Hex string.
     *
     * @param byteArray the byte array
     * @return the string
     */

    public static String toHexString(byte[] byteArray) {
        final StringBuilder hexString = new StringBuilder("");
        if (byteArray == null || byteArray.length <= 0)
            return null;
        for (int i = 0; i < byteArray.length; i++) {
            int v = byteArray[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                hexString.append(0);
            }
            hexString.append(hv);
        }
        return hexString.toString().toLowerCase();
    }

参考博客:http://blog.csdn.net/linlzk/article/details/6566124

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java中,可以使用Integer类的静态方法parseInt()来将十六进制字符串转换为对应的整数,然后使用Character类的静态方法toString()将整数转换为对应的字符。另外,可以使用StringBuilder类来拼接字符串。 首先,需要将十六进制字符串转换为十进制整数。例如,将字符串"616263"转换为整数可以使用如下代码: ``` int decVal = Integer.parseInt("616263", 16); ``` 然后,使用整数对应的字符创建字符串。例如,可以使用如下代码将整数decVal转换为字符: ``` String strVal = Character.toString((char) decVal); ``` 如果要将多个十六进制字符串转换为字符串,可以使用StringBuilder类来拼接字符串。例如,将字符串"616263646566"转换为"abcdefgh"可以使用如下代码: ``` String hexStr = "616263646566"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < hexStr.length(); i += 2) { String hexPair = hexStr.substring(i, i + 2); int decVal = Integer.parseInt(hexPair, 16); sb.append(Character.toString((char) decVal)); } String strVal = sb.toString(); ``` 以上代码将每两个字符作为一个十六进制字符串,将其转换为对应的字符,并使用StringBuilder类进行拼接,最后得到字符串"abcdefgh"。 ### 回答2: 在Java中,将十六进制转换为字符串有几种方法。下面我会介绍其中的两种常用方法。 第一种方法是使用`Integer.parseInt()`和`Integer.toHexString()`函数。可以先将十六进制字符串转换为整数,然后使用整数转换为字符串。具体步骤如下: ```java String hexString = "616263"; // 十六进制字符串 int intValue = Integer.parseInt(hexString, 16); // 将十六进制字符串转换为整数 String stringValue = Integer.toString(intValue); // 将整数转换为字符串 System.out.println(stringValue); // 输出字符串 "616263" ``` 第二种方法是使用`Hex.decodeHex()`函数和`new String()`构造函数。先将十六进制字符串解码为字节数组,然后使用字节数组创建字符串。具体步骤如下: ```java import org.apache.commons.codec.binary.Hex; // 需要导入Apache Commons Codec库 String hexString = "616263"; // 十六进制字符串 byte[] byteArray = Hex.decodeHex(hexString); // 将十六进制字符串解码为字节数组 String stringValue = new String(byteArray); // 根据字节数组创建字符串 System.out.println(stringValue); // 输出字符串 "abc" ``` 以上是两种常用的将十六进制字符串转换为字符串的方法。你可以根据具体的需求选择适合自己的方法。 ### 回答3: 在 Java 中,我们可以使用一些方法将十六进制数据转换为字符串。 首先,我们需要确保要转换的十六进制数据是一个有效的字符串。我们可以使用`String`类的构造函数来创建一个新的字符串对象,该对象接收一个字节数组作为参数,并使用指定的字符集将该数组解码为字符串。例如: ```java byte[] hexBytes = {0x68, 0x65, 0x6c, 0x6c, 0x6f}; // 十六进制数据 String hexString = new String(hexBytes, StandardCharsets.UTF_8); System.out.println(hexString); // 输出 "hello" ``` 这里,我们将十六进制字节数组 `{0x68, 0x65, 0x6c, 0x6c, 0x6f}` 使用 UTF-8 字符集解码为字符串 "hello"。 另外,如果十六进制数据包含大量字节,则可以使用`StringBuilder`类来构建字符串对象,以提高性能。例如: ```java byte[] hexBytes = {0x68, 0x65, 0x6c, 0x6c, 0x6f}; // 十六进制数据 StringBuilder hexStringBuilder = new StringBuilder(); for (byte b : hexBytes) { hexStringBuilder.append(String.format("%02x", b)); } String hexString = hexStringBuilder.toString(); System.out.println(hexString); // 输出 "68656c6c6f" ``` 在这个例子中,我们使用`StringBuilder`类来逐个追加每个字节的十六进制表示到字符串中,最后调用`toString()`方法将`StringBuilder`对象转换为一个字符串。 这些方法可以使我们在 Java 中将十六进制数据转换为字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值