Last active
March 2, 2018 09:41
-
-
Save easternHong/6ca75a7fdce15c6a23d3 to your computer and use it in GitHub Desktop.
ByteArrayToHexString HexStringToByteArray
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Utility method to convert a byte array to a hexadecimal string. | |
* | |
* @param bytes Bytes to convert | |
* @return String, containing hexadecimal representation. | |
*/ | |
public static String ByteArrayToHexString(byte[] bytes) { | |
final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; | |
char[] hexChars = new char[bytes.length * 2]; // Each byte has two hex characters (nibbles) | |
int v; | |
for (int j = 0; j < bytes.length; j++) { | |
v = bytes[j] & 0xFF; // Cast bytes[j] to int, treating as unsigned value | |
hexChars[j * 2] = hexArray[v >>> 4]; // Select hex character from upper nibble | |
hexChars[j * 2 + 1] = hexArray[v & 0x0F]; // Select hex character from lower nibble | |
} | |
return new String(hexChars); | |
} | |
/** | |
* Utility method to convert a hexadecimal string to a byte string. | |
* | |
* <p>Behavior with input strings containing non-hexadecimal characters is undefined. | |
* | |
* @param s String containing hexadecimal characters to convert | |
* @return Byte array generated from input | |
* @throws java.lang.IllegalArgumentException if input length is incorrect | |
*/ | |
public static byte[] HexStringToByteArray(String s) throws IllegalArgumentException { | |
int len = s.length(); | |
if (len % 2 == 1) { | |
throw new IllegalArgumentException("Hex string must have even number of characters"); | |
} | |
byte[] data = new byte[len / 2]; // Allocate 1 byte per 2 hex characters | |
for (int i = 0; i < len; i += 2) { | |
// Convert each character into a integer (base-16), then bit-shift into place | |
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) | |
+ Character.digit(s.charAt(i+1), 16)); | |
} | |
return data; | |
} | |
/** | |
* Utility method to concatenate two byte arrays. | |
* @param first First array | |
* @param rest Any remaining arrays | |
* @return Concatenated copy of input arrays | |
*/ | |
public static byte[] ConcatArrays(byte[] first, byte[]... rest) { | |
int totalLength = first.length; | |
for (byte[] array : rest) { | |
totalLength += array.length; | |
} | |
byte[] result = Arrays.copyOf(first, totalLength); | |
int offset = first.length; | |
for (byte[] array : rest) { | |
System.arraycopy(array, 0, result, offset, array.length); | |
offset += array.length; | |
} | |
return result; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment