如何在Java中自动转换十六进制代码以将其用作字节[]?

如何在Java中自动转换十六进制代码以将其用作字节[]?,java,hex,bytearray,converter,Java,Hex,Bytearray,Converter,我这里有很多十六进制代码,我想把它们放到Java中,而不给每个实体添加0x。比如: 0102FFAB和我必须执行以下操作: byte[] test = {0x01, 0x02, 0xFF, 0xAB}; 我有很多非常长的十六进制代码。有没有办法自动执行此操作?您可以尝试将十六进制代码放入一个字符串中,然后在该字符串上迭代,如下所示: String input = "0102FFAB"; byte[] bytes = new byte[input.length() / 2]; for( int

我这里有很多十六进制代码,我想把它们放到Java中,而不给每个实体添加0x。比如:

0102FFAB和我必须执行以下操作:

byte[] test = {0x01, 0x02, 0xFF, 0xAB};

我有很多非常长的十六进制代码。有没有办法自动执行此操作?

您可以尝试将十六进制代码放入一个字符串中,然后在该字符串上迭代,如下所示:

String input = "0102FFAB";
byte[] bytes = new byte[input.length() / 2];

for( int i = 0; i < input.length(); i+=2)
{
  bytes[i/2] = Integer.decode( "0x" + input.substring( i, i + 2 )  ).byteValue();
}
String input=“0102FFAB”;
字节[]字节=新字节[input.length()/2];
对于(int i=0;i

请注意,这需要长度均匀的字符串,这是一个非常快速和肮脏的解决方案。但是,它仍然可以让您开始使用。

您可以使用BigInteger加载一个长的十六进制字符串

public static void main(String[] args) {
    String hex = "c33b2cfca154c3a3362acfbde34782af31afb606f6806313cc0df40928662edd3ef1d630ab1b75639154d71ed490a36e5f51f6c9d270c4062e8266ad1608bdc496a70f6696fa6e7cd7078c6674188e8a49ecba71fad049a3d483ccac45d27aedfbb31d82adb8135238b858143492b1cbda2e854e735909256365a270095fc";
    byte[] bytes2 = hexToBytes(hex);
    for(byte b: bytes2)
        System.out.printf("%02x", b & 0xFF);

}

public static byte[] hexToBytes(String hex) {
    // add a 10 to the start to avoid sign issues, or an odd number of characters.
    BigInteger bi2 = new BigInteger("10" +hex, 16);
    byte[] bytes2 = bi2.toByteArray();
    byte[] bytes = new byte[bytes2.length-1];
    System.arraycopy(bytes2, 1, bytes, 0, bytes.length);
    return bytes;
}
印刷品

0C33BCFCA154C3A3362CFBDE34782AF31AFB606F6806313C0DF40928662EDD3EF1D630AB1B75639154D71ED490A36E5F51F6C9D270C4062E8266AD1608BDC4496A70F6696FA6E7CD7078C6674188E8A49ECBA71FAD049A3483CCAC445D27AEDB31D82ADB8135238B858143492BDA2E854E735909365A2700FC


注意:它处理的是在开始时有一个十六进制值短的可能性。

这些十六进制代码是什么形式的,
字符串
?文件中不只是纯文本。。。。但我不想从该文件中读取它们,只想将它们硬编码到java程序中