从十六进制转换为字节

时间:2015-01-16 14:18:15

标签: java hex

我有一些Java代码将十六进制字符串转换为字节。它似乎适用于非常短的十六进制字符串但如果我使用长字符串则标记错误,但我无法弄清楚原因。我是Java和编程的新手。随意指出我可以改进的任何其他领域。

这是我的代码:

public class Hextobinary {

static String hexToBinary(String hex) {
    int i = Integer.parseInt(hex, 16);
String bin = Integer.toBinaryString(i);
return bin;
}

public static void main(String[] args) {

    String h = "5F";
String x = hexToBinary(h);
    System.out.println(x);
}

}

非常感谢

3 个答案:

答案 0 :(得分:3)

使用DatatypeConverter有内置功能,因此您可能不必自己动手。

import javax.xml.bind.DatatypeConverter;

public class HexUtils {

    public String toHex(final byte[] arr) {
        return DatatypeConverter.printHexBinary(arr);
    }

    public byte[] fromHex(final String str) {
        return DatatypeConverter.parseHexBinary(str);
    }

}

答案 1 :(得分:1)

您正在将字符串解析为int。这适用于短十六进制字符串,但不适用于较长的字符串。 int是32位或8个十六进制字符。任何超过该字符串的字符串都不适合int

如果您编写自己的方法,则将十六进制字符串拆分为两个字符块,并将每对字符分别处理为一个字节,并将字节存储在字节数组中。这将允许您处理更长的十六进制字符串。

答案 2 :(得分:1)

如果使用大字符串,则变量i的int(Integer)类型不能存储字符串hex中包含的值。整数只能存储范围从-80000000(十六进制)到+ 7FFFFFFF的值。任何更长的字符串都会导致函数产生错误的结果。

一个快速的解决方案是使用Long(和函数parseLong)类型而不是Integer。 Long类型可以保存范围从-8000000000000000(十六进制)到+ 7FFFFFFFFFFFFFFF的值。但是如果你需要转换更长的字符串,那就不再适用了。