Carmelo Cascone

Added possibility to decode HEX strings without separator

Change-Id: I6e11ad2a3dc4e39b148a740d5f19d80705f78b48
(cherry picked from commit 6eaa33ab)
...@@ -109,7 +109,25 @@ public final class HexString { ...@@ -109,7 +109,25 @@ public final class HexString {
109 * @throws NumberFormatException if input hex string cannot be parsed 109 * @throws NumberFormatException if input hex string cannot be parsed
110 */ 110 */
111 public static byte[] fromHexString(final String values) { 111 public static byte[] fromHexString(final String values) {
112 - String[] octets = values.split(":"); 112 + return fromHexString(values, ":");
113 + }
114 +
115 + /**
116 + * Convert a hex-string with arbitrary separator to byte array.
117 + * If separator is the empty string or null, then no separator will be considered.
118 + *
119 + * @param values hex string to be converted
120 + * @return converted byte array
121 + * @throws NumberFormatException if input hex string cannot be parsed
122 + */
123 + public static byte[] fromHexString(final String values, String separator) {
124 + String regexSeparator;
125 + if (separator == null || separator.length() == 0) {
126 + regexSeparator = "(?<=\\G.{2})"; // Split string into several two character strings
127 + } else {
128 + regexSeparator = separator;
129 + }
130 + String[] octets = values.split(regexSeparator);
113 byte[] ret = new byte[octets.length]; 131 byte[] ret = new byte[octets.length];
114 132
115 for (int i = 0; i < octets.length; i++) { 133 for (int i = 0; i < octets.length; i++) {
......
...@@ -21,6 +21,9 @@ import com.esotericsoftware.minlog.Log; ...@@ -21,6 +21,9 @@ import com.esotericsoftware.minlog.Log;
21 21
22 import junit.framework.TestCase; 22 import junit.framework.TestCase;
23 23
24 +import java.nio.ByteBuffer;
25 +import java.util.Arrays;
26 +
24 import static org.junit.Assert.fail; 27 import static org.junit.Assert.fail;
25 28
26 /** 29 /**
...@@ -55,6 +58,22 @@ public class HexStringTest { ...@@ -55,6 +58,22 @@ public class HexStringTest {
55 } 58 }
56 59
57 @Test 60 @Test
61 + public void testFromHexString() {
62 + String dpidStr = "3e:1f:01:fc:72:8c:63:31";
63 + String dpidStrNoSep = "3e1f01fc728c6331";
64 + long valid = 0x3e1f01fc728c6331L;
65 + byte[] validBytes = ByteBuffer.allocate(Long.BYTES).putLong(valid).array();
66 + byte[] testBytes = HexString.fromHexString(dpidStr);
67 + byte[] testBytesNoSep = HexString.fromHexString(dpidStrNoSep, null);
68 + byte[] testBytesUCase = HexString.fromHexString(dpidStr.toUpperCase());
69 + byte[] testBytesUCaseNoSep = HexString.fromHexString(dpidStrNoSep.toUpperCase(), null);
70 + TestCase.assertTrue(Arrays.equals(validBytes, testBytes));
71 + TestCase.assertTrue(Arrays.equals(validBytes, testBytesNoSep));
72 + TestCase.assertTrue(Arrays.equals(validBytes, testBytesUCase));
73 + TestCase.assertTrue(Arrays.equals(validBytes, testBytesUCaseNoSep));
74 + }
75 +
76 + @Test
58 public void testToLongError() { 77 public void testToLongError() {
59 String dpidStr = "09:08:07:06:05:04:03:02:01"; 78 String dpidStr = "09:08:07:06:05:04:03:02:01";
60 try { 79 try {
......