1 package gnu.kawa.xml; 2 3 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 str) 13 { 14 return new HexBinary(parseHexBinary(str)); 15 } 16 17 static byte[] parseHexBinary (String str) 18 { 19 str = str.trim(); 20 int len = str.length(); 21 if ((len & 1) != 0) 22 throw new IllegalArgumentException ("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 ("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 toString (StringBuffer 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 toString () 58 { 59 return toString(new StringBuffer ()).toString(); 60 } 61 } 62 | Popular Tags |