⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hexbinary.java

📁 jdo开发实例,一个功能全面的oa系统
💻 JAVA
字号:
package com.gzrealmap.oa;

/**
 * <p>Title: OA</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: Realmap.cc</p>
 * @author not attributable
 * @version OA2003b
 */

import java.io.ByteArrayOutputStream;

/**
 * Custom class for supporting primitive XSD data type hexBinary.
 *
 * @author Davanum Srinivas <dims@yahoo.com>
 */
public class HexBinary
    implements java.io.Serializable {

  byte[] m_value = null;

  public HexBinary() {
  }

  public HexBinary(String string) {
    m_value = decode(string);
  }

  public HexBinary(byte[] bytes) {
    m_value = bytes;
  }

  public byte[] getBytes() {
    return m_value;
  }

  public String toString() {
    return encode(m_value);
  }

  public int hashCode() {
    //TODO: How do we hash this?
    return super.hashCode();
  }

  public boolean equals(Object object) {
    //TODO: Is this good enough?
    String s1 = object.toString();
    String s2 = this.toString();
    return s1.equals(s2);
  }

  public static final String ERROR_ODD_NUMBER_OF_DIGITS =
      "ERROR_ODD_NUMBER_OF_DIGITS";
  public static final String ERROR_BAD_CHARACTER_IN_HEX_STRING =
      "ERROR_BAD_CHARACTER_IN_HEX_STRING";

  // Code from Ajp11, from Apache's JServ

  // Table for HEX to DEC byte translation
  public static final int[] DEC = {
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      00, 01, 02, 03, 04, 05, 06, 07, 8, 9, -1, -1, -1, -1, -1, -1,
      -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  };

  /**
   * Convert a String of hexadecimal digits into the corresponding
   * byte array by encoding each two hexadecimal digits as a byte.
   *
   * @param digits Hexadecimal digits representation
   *
   * @exception IllegalArgumentException if an invalid hexadecimal digit
   *  is found, or the input string contains an odd number of hexadecimal
   *  digits
   */
  public static byte[] decode(String digits) {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    for (int i = 0; i < digits.length(); i += 2) {
      char c1 = digits.charAt(i);
      if ( (i + 1) >= digits.length())
        throw new IllegalArgumentException
            (ERROR_ODD_NUMBER_OF_DIGITS);
      char c2 = digits.charAt(i + 1);
      byte b = 0;
      if ( (c1 >= '0') && (c1 <= '9'))
        b += ( (c1 - '0') * 16);
      else if ( (c1 >= 'a') && (c1 <= 'f'))
        b += ( (c1 - 'a' + 10) * 16);
      else if ( (c1 >= 'A') && (c1 <= 'F'))
        b += ( (c1 - 'A' + 10) * 16);
      else
        throw new IllegalArgumentException
            (ERROR_BAD_CHARACTER_IN_HEX_STRING);
      if ( (c2 >= '0') && (c2 <= '9'))
        b += (c2 - '0');
      else if ( (c2 >= 'a') && (c2 <= 'f'))
        b += (c2 - 'a' + 10);
      else if ( (c2 >= 'A') && (c2 <= 'F'))
        b += (c2 - 'A' + 10);
      else
        throw new IllegalArgumentException
            (ERROR_BAD_CHARACTER_IN_HEX_STRING);
      baos.write(b);
    }
    return (baos.toByteArray());

  }

  /**
   * Convert a byte array into a printable format containing a
   * String of hexadecimal digit characters (two per byte).
   *
   * @param bytes Byte array representation
   */
  public static String encode(byte bytes[]) {

    StringBuffer sb = new StringBuffer(bytes.length * 2);
    for (int i = 0; i < bytes.length; i++) {
      sb.append(convertDigit( (int) (bytes[i] >> 4)));
      sb.append(convertDigit( (int) (bytes[i] & 0x0f)));
    }
    return (sb.toString());

  }

  /**
   * Convert 4 hex digits to an int, and return the number of converted
   * bytes.
   *
   * @param hex Byte array containing exactly four hexadecimal digits
   *
   * @exception IllegalArgumentException if an invalid hexadecimal digit
   *  is included
   */
  public static int convert2Int(byte[] hex) {
    // Code from Ajp11, from Apache's JServ

    // assert b.length==4
    // assert valid data
    int len;
    if (hex.length < 4)
      return 0;
    if (DEC[hex[0]] < 0)
      throw new IllegalArgumentException(ERROR_BAD_CHARACTER_IN_HEX_STRING);
    len = DEC[hex[0]];
    len = len << 4;
    if (DEC[hex[1]] < 0)
      throw new IllegalArgumentException(ERROR_BAD_CHARACTER_IN_HEX_STRING);
    len += DEC[hex[1]];
    len = len << 4;
    if (DEC[hex[2]] < 0)
      throw new IllegalArgumentException(ERROR_BAD_CHARACTER_IN_HEX_STRING);
    len += DEC[hex[2]];
    len = len << 4;
    if (DEC[hex[3]] < 0)
      throw new IllegalArgumentException(ERROR_BAD_CHARACTER_IN_HEX_STRING);
    len += DEC[hex[3]];
    return len;
  }

  /**
   * [Private] Convert the specified value (0 .. 15) to the corresponding
   * hexadecimal digit.
   *
   * @param value Value to be converted
   */
  private static char convertDigit(int value) {

    value &= 0x0f;
    if (value >= 10)
      return ( (char) (value - 10 + 'a'));
    else
      return ( (char) (value + '0'));

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -