diff --git a/src/main/java/tools/HexTool.java b/src/main/java/tools/HexTool.java index e610055e95..f23e2ac5fc 100644 --- a/src/main/java/tools/HexTool.java +++ b/src/main/java/tools/HexTool.java @@ -22,6 +22,7 @@ package tools; import constants.string.CharsetConstants; +import io.netty.buffer.ByteBufUtil; import java.io.ByteArrayOutputStream; @@ -105,4 +106,14 @@ public class HexTool { return ""; } + /** + * Get upper case hex dump + */ + public static String bytesToHex(byte[] bytes) { + return ByteBufUtil.hexDump(bytes).toUpperCase(); + } + + public static byte[] hexToBytes(String hex) { + return ByteBufUtil.decodeHexDump(hex); + } } diff --git a/src/test/java/tools/HexToolTest.java b/src/test/java/tools/HexToolTest.java new file mode 100644 index 0000000000..8ea59c403a --- /dev/null +++ b/src/test/java/tools/HexToolTest.java @@ -0,0 +1,22 @@ +package tools; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class HexToolTest { + + @Test + void upperCaseHexToBytesAndBack() { + String hex = "A1B2C3"; + byte[] bytes = HexTool.hexToBytes(hex); + assertEquals(hex, HexTool.bytesToHex(bytes)); + } + + @Test + void mixedCaseHexToBytesAndBack() { + String hex = "aB5DaA"; + byte[] bytes = HexTool.hexToBytes(hex); + assertEquals(hex.toUpperCase(), HexTool.bytesToHex(bytes)); + } +} \ No newline at end of file