Как автоматически преобразовать hexcode, чтобы использовать его как байт [] в Java? - PullRequest
2 голосов
/ 08 марта 2012

У меня здесь много шестнадцатеричных кодов, и я хочу перевести их в Java без добавления 0x к каждой сущности Как:

0102FFAB, и я должен сделать следующее:

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

И у меня есть много гекс-кодов, которые довольно длинные. Есть ли способ сделать это автоматически?

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Вы можете использовать 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;
}

печать

1005 * 0c33b2cfca154c3a3362acfbde34782af31afb606f6806313cc0df40928662edd3ef1d630ab1b75639154d71ed490a36e5f51f6c9d270c4062e8266ad1608bdc496a70f6696fa6e7cd7078c6674188e8a49ecba71fad049a3d483ccac45d27aedfbb31d82adb8135238b858143492b1cbda2e854e735909256365a270095fc 1007 * примечание:. Он обрабатывает вероятность того, что есть один шестнадцатеричной короткийв начале.
3 голосов
/ 08 марта 2012

Вы можете попытаться поместить шестнадцатеричные коды в строку, а затем выполнить итерацию по строке, как показано ниже:

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();
}

Обратите внимание, что для этого требуются строки одинаковой длины, и это довольно быстрое и грязное решение. Тем не менее, это все равно должно начать вас.

...