mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-19 00:20:26 +00:00
73 lines
2.5 KiB
Java
73 lines
2.5 KiB
Java
package com.bwssystems.HABridge.util;
|
|
|
|
import java.math.BigInteger;
|
|
|
|
public class HexLibrary {
|
|
|
|
public static String byteToHex(byte num) {
|
|
char[] hexDigits = new char[2];
|
|
hexDigits[0] = Character.forDigit((num >> 4) & 0xF, 16);
|
|
hexDigits[1] = Character.forDigit((num & 0xF), 16);
|
|
return new String(hexDigits);
|
|
}
|
|
|
|
public static byte hexToByte(String hexString) {
|
|
int firstDigit = toDigit(hexString.charAt(0));
|
|
int secondDigit = toDigit(hexString.charAt(1));
|
|
return (byte) ((firstDigit << 4) + secondDigit);
|
|
}
|
|
|
|
private static int toDigit(char hexChar) {
|
|
int digit = Character.digit(hexChar, 16);
|
|
if (digit == -1) {
|
|
throw new IllegalArgumentException("Invalid Hexadecimal Character: " + hexChar);
|
|
}
|
|
return digit;
|
|
}
|
|
|
|
public static String encodeHexString(byte[] byteArray) {
|
|
StringBuffer hexStringBuffer = new StringBuffer();
|
|
for (int i = 0; i < byteArray.length; i++) {
|
|
hexStringBuffer.append(byteToHex(byteArray[i]));
|
|
}
|
|
return hexStringBuffer.toString();
|
|
}
|
|
|
|
public static byte[] decodeHexString(String hexString) {
|
|
if (hexString.length() % 2 == 1) {
|
|
throw new IllegalArgumentException("Invalid hexadecimal String supplied.");
|
|
}
|
|
|
|
byte[] bytes = new byte[hexString.length() / 2];
|
|
for (int i = 0; i < hexString.length(); i += 2) {
|
|
bytes[i / 2] = hexToByte(hexString.substring(i, i + 2));
|
|
}
|
|
return bytes;
|
|
}
|
|
|
|
public static String encodeUsingBigIntegerStringFormat(byte[] bytes) {
|
|
BigInteger bigInteger = new BigInteger(1, bytes);
|
|
return String.format("%0" + (bytes.length << 1) + "x", bigInteger);
|
|
}
|
|
|
|
public static String encodeUsingBigIntegerToString(String intValue) {
|
|
BigInteger bigInteger = BigInteger.valueOf(Integer.decode(intValue));
|
|
return bigInteger.toString(16);
|
|
}
|
|
|
|
public static String encodeUsingBigIntegerToString(byte[] bytes) {
|
|
BigInteger bigInteger = new BigInteger(1, bytes);
|
|
return bigInteger.toString(16);
|
|
}
|
|
|
|
public static byte[] decodeUsingBigInteger(String hexString) {
|
|
byte[] byteArray = new BigInteger(hexString, 16).toByteArray();
|
|
if (byteArray[0] == 0) {
|
|
byte[] output = new byte[byteArray.length - 1];
|
|
System.arraycopy(byteArray, 1, output, 0, output.length);
|
|
return output;
|
|
}
|
|
return byteArray;
|
|
}
|
|
}
|