minor fixes around HexString

- fix buffer size calculation
- slightly improve hex conversino logic
- remove unnecessary dependency

Change-Id: I779d88d0c5ec1c4999ce6237d0c17c3057581ea7
diff --git a/utils/misc/src/main/java/org/onlab/util/HexString.java b/utils/misc/src/main/java/org/onlab/util/HexString.java
index f7712d6..2f8a679 100644
--- a/utils/misc/src/main/java/org/onlab/util/HexString.java
+++ b/utils/misc/src/main/java/org/onlab/util/HexString.java
@@ -17,6 +17,8 @@
 
 public final class HexString {
 
+    private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray();
+
     private HexString() {
     }
 
@@ -45,18 +47,15 @@
         if (separator == null) {
             separator = "";
         }
-        int i;
-        StringBuilder ret = new StringBuilder(bytes.length * 3 - 1);
-        String tmp;
-        for (i = 0; i < bytes.length; i++) {
-            if (i > 0) {
+        int slen = bytes.length * (2 + separator.length()) - separator.length();
+        StringBuilder ret = new StringBuilder(slen);
+        boolean addSeparator = !separator.isEmpty();
+        for (int i = 0; i < bytes.length; i++) {
+            if (i > 0 && addSeparator) {
                 ret.append(separator);
             }
-            tmp = Integer.toHexString((bytes[i] & 0xff));
-            if (tmp.length() == 1) {
-                ret.append('0');
-            }
-            ret.append(tmp);
+            ret.append(HEX_CHARS[(bytes[i] >> 4) & 0xF]);
+            ret.append(HEX_CHARS[(bytes[i] & 0xF)]);
         }
         return ret.toString();
     }