KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > kawa > xml > HexBinary


1 package gnu.kawa.xml;
2
3 /** A BinaryObject whose lexical format is hexBinary. */
4
5 public class HexBinary extends BinaryObject
6 {
7   public HexBinary (byte[] data)
8   {
9     this.data = data;
10   }
11
12   static HexBinary valueOf (String JavaDoc str)
13   {
14     return new HexBinary(parseHexBinary(str));
15   }
16
17   static byte[] parseHexBinary (String JavaDoc str)
18   {
19     str = str.trim();
20     int len = str.length();
21     if ((len & 1) != 0)
22       throw new IllegalArgumentException JavaDoc("hexBinary string length not a multiple of 2");
23     len = len >> 1;
24     byte[] result = new byte[len];
25     for (int i = 0; i < len; i++)
26       {
27         int d1 = Character.digit(str.charAt(2*i), 16);
28         int d2 = Character.digit(str.charAt(2*i+1), 16);
29         int bad = -1;
30         if (d1 < 0) bad = 2*i;
31         else if (d2 < 0) bad = 2*i+1;
32         if (bad >= 0)
33           throw new IllegalArgumentException JavaDoc ("invalid hexBinary character at position "+bad);
34         result[i] = (byte) (16 * d1 + d2);
35       }
36     return result;
37   }
38
39   static char forHexDigit (int val)
40   {
41     return val < 10 ? (char) (val + '0') : (char) (val - 10 + 'A');
42   }
43
44   public StringBuffer JavaDoc toString (StringBuffer JavaDoc sbuf)
45   {
46     byte[] bb = data;
47     int len = bb.length;
48     for (int i = 0; i < len; i++)
49       {
50         byte b = bb[i];
51         sbuf.append(forHexDigit((b >> 4) & 15));
52         sbuf.append(forHexDigit(b & 15));
53       }
54     return sbuf;
55   }
56
57   public String JavaDoc toString ()
58   {
59     return toString(new StringBuffer JavaDoc()).toString();
60   }
61 }
62
Popular Tags