package com.cisdi.data.util;

public class HexUtil {
	/*
	* Convert byte[] to hex string.这里我们可以将byte转换成int，然后利用Integer.toHexString(int)来转换成16进制字符串。   
	 * @param src byte[] data   
	 * @return hex string   
	 */      
	public static String bytesToHexString(byte[] src){   
	    StringBuilder stringBuilder = new StringBuilder("");   
	    if (src == null || src.length <= 0) {   
	        return null;   
	    }   
	    for (int i = 0; i < src.length; i++) {   
	        int v = src[i] & 0xFF;   
	        String hv = Integer.toHexString(v);   
	        if (hv.length() < 2) {   
	            stringBuilder.append(0);   
	        }   
	        stringBuilder.append(hv);   
	    }   
	    return stringBuilder.toString();   
	}   
	
	/**  
	 * Convert hex string to byte[]  
	 * @param hexString the hex string  
	 * @return byte[]  
	 */  
	public static byte[] hexStringToBytes(String hexString) {   
	    if (hexString == null || hexString.equals("")) {   
	        return null;   
	    }   
	    hexString = hexString.toUpperCase();   
	    int length = hexString.length() / 2;   
	    char[] hexChars = hexString.toCharArray();   
	    byte[] d = new byte[length];   
	    for (int i = 0; i < length; i++) {   
	        int pos = i * 2;   
	        d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));   
	    }   
	    return d;   
	}  
	
	/**  
	 * Convert char to byte  
	 * @param c char  
	 * @return byte  
	 */  
	 private static byte charToByte(char c) {   
	    return (byte) "0123456789ABCDEF".indexOf(c);   
	} 
	 
	//将指定byte数组以16进制的形式打印到控制台   
	 public static void printHexString( byte[] b) {     
	    for (int i = 0; i < b.length; i++) {    
	      String hex = Integer.toHexString(b[i] & 0xFF);    
	      if (hex.length() == 1) {    
	        hex = '0' + hex;    
	      }    
	      System.out.print(hex.toUpperCase() );    
	    }    
	 }  
	 
	 public static Byte Byte(int value) {
		 Byte result = (byte)(value & 0xff);
		 return result;
	 }
	 
	 public static Short Short(int value) {
		 Short result = (short)(value & 0xffff);
		 return result;
	 }
}
