Complete documentation.
[jSite2.git] / src / net / pterodactylus / util / number / Hex.java
index 36cca06..de7929e 100644 (file)
@@ -21,26 +21,68 @@ package net.pterodactylus.util.number;
 
 /**
  * Conversion routines for handling hexadecimal numbers.
- * 
+ *
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- * @version $Id$
  */
 public class Hex {
 
        /**
         * Converts the given byte array to a hexadecimal string.
-        * 
+        *
         * @param dataBytes
         *            The bytes to convert
         * @return A string of hexadecimal numbers
         */
        public static String toHex(byte[] dataBytes) {
                StringBuilder hexString = new StringBuilder(dataBytes.length * 2);
-               for (byte dataByte: dataBytes) {
+               for (byte dataByte : dataBytes) {
                        String hexByte = "0" + Integer.toHexString(dataByte & 0xff);
                        hexString.append(hexByte.substring(hexByte.length() - 2));
                }
                return hexString.toString();
        }
 
+       /**
+        * Converts the given value to a hexadecimal string and zero-pads it to the
+        * given number of digits.
+        *
+        * @param value
+        *            The value to convert
+        * @param digits
+        *            The number of digits
+        * @return The formatted hexadecimal value
+        */
+       public static String toHex(long value, int digits) {
+               StringBuilder hexString = new StringBuilder();
+               hexString.append(Long.toHexString(value));
+               while (hexString.length() < digits) {
+                       hexString.insert(0, '0');
+               }
+               return hexString.toString();
+       }
+
+       /**
+        * Decodes a hexadecimal string into a byte array.
+        *
+        * @param hexString
+        *            The hexadecimal representation to decode
+        * @return The decoded byte array
+        * @see Integer#parseInt(java.lang.String, int)
+        * @throw NumberFormatException if the given string is not the hexadecimal
+        *        representation of a byte array
+        */
+       public static byte[] toByte(String hexString) {
+               if ((hexString.length() & 0x01) == 0x01) {
+                       /* odd length, this is not correct. */
+                       throw new NumberFormatException("hex string must have even length.");
+               }
+               byte[] dataBytes = new byte[hexString.length() / 2];
+               for (int stringIndex = 0; stringIndex < hexString.length(); stringIndex += 2) {
+                       String hexNumber = hexString.substring(stringIndex, stringIndex + 2);
+                       byte dataByte = (byte) Integer.parseInt(hexNumber, 16);
+                       dataBytes[stringIndex / 2] = dataByte;
+               }
+               return dataBytes;
+       }
+
 }