Conversão Hex para ASCII em Java

Conversão Hex para ASCII em Java

1. Visão geral

Neste artigo rápido, faremos algumas conversões simples entre os formatos Hex e ASCII.

Em um caso de uso típico, o formato Hex pode ser usado para escrever valores inteiros muito grandes em uma forma compacta. Por exemplo, AD45 é menor que seu equivalente decimal 44357 e, à medida que os valores aumentam, a diferença de comprimento se torna ainda mais acentuada.

2. ASCII para Hex

Agora, vamos dar uma olhada em nossas opções para converter valores ASCII em Hex:

  1. Converter String em matriz de caracteres

  2. Lance cadachar para umint

  3. UseInteger.toHexString() para convertê-lo em hexadecimal

Aqui está um exemplo rápido de como podemos alcançar as etapas acima:

private static String asciiToHex(String asciiStr) {
    char[] chars = asciiStr.toCharArray();
    StringBuilder hex = new StringBuilder();
    for (char ch : chars) {
        hex.append(Integer.toHexString((int) ch));
    }

    return hex.toString();
}

3. Formato Hex para ASCII

Da mesma forma, vamos fazer uma conversão do formato Hex para ASCII em três etapas:

  1. Corte o valor Hex em grupos de 2char

  2. Converta-o para inteiro de base 16 usandoInteger.parseInt(hex, 16)e lance parachar

  3. Anexar todos os caracteres em umStringBuilder

Vejamos um exemplo de como podemos alcançar as etapas acima:

private static String hexToAscii(String hexStr) {
    StringBuilder output = new StringBuilder("");

    for (int i = 0; i < hexStr.length(); i += 2) {
        String str = hexStr.substring(i, i + 2);
        output.append((char) Integer.parseInt(str, 16));
    }

    return output.toString();
}

4. Test

Finalmente, usando esses métodos, vamos fazer um teste rápido:

@Test
public static void whenHexToAscii() {
    String asciiString = "www.example.com";
    String hexEquivalent =
      "7777772e6261656c64756e672e636f6d";

    assertEquals(asciiString, hexToAscii(hexEquivalent));
}

@Test
public static void whenAsciiToHex() {
    String asciiString = "www.example.com";
    String hexEquivalent =
      "7777772e6261656c64756e672e636f6d";

    assertEquals(hexEquivalent, asciiToHex(asciiString));
}

5. Conclusão

Para concluir, examinamos as maneiras mais simples de converter entre ASCII e Hex usando Java.

A implementação de todos esses exemplos e trechos de código pode ser encontradain the github project - basta importar o projeto e executar como está.