자바 바이트 배열 byte[],16 진 문자열 상호 전환,

더 읽 기
 
commons-codec-*.jar 에 통용 되 는 방법 이 있 습 니 다.
Hex.encodeHex(byte[]) 바이트 배열 을 16 진 문자열 로 변환 합 니 다. (대문자 로 변환 가능)
Hex.decodeHex(char[]) 16 진수"문자열"을 바이트 배열 로 변환 합 니 다. (대문자 지원)
 
다음 두 가 지 는 사용자 정의 쓰기 입 니 다.일반적인 방법 을 사용 하 는 것 을 권장 합 니 다.
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

/**
 *       
 * @author happyqing
 * @since 2013.11.6
 */
public class StringUtil {
	
	/**
	 *        16     
	 * @param bytes     
	 * @return 16     
	 */
	public static String hexEncode(byte[] bytes) {
		if (bytes == null || bytes.length <= 0) {
			return null;
		}
		return new String(Hex.encodeHex(bytes)); //Hex.encodeHex(bytes, false)
	}

	/**
	 * 16            
	 * @param hexStr 16     
	 * @return     
	 */
	public static byte[] hexDecode(String hexStr) {
		if (hexStr == null || "".equals(hexStr)) {
			return null;
		}
		try {
			char[] cs = hexStr.toCharArray();
			return Hex.decodeHex(cs);
		} catch (DecoderException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 *       16     
	 * @param bytes     
	 * @return 16     
	 */
	public static String byteArray2HexString(byte[] bytes) {
		if (bytes == null || bytes.length <= 0) {
			return null;
		}
		//  byte[]    char[],  char[]      
		char[] chars = new char[bytes.length * 2]; //   byte      
		final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
		for (int i = 0, j = 0; i < bytes.length; i++) {
			chars[j++] = hexDigits[bytes[i] >> 4 & 0x0f]; //   byte  4 
			chars[j++] = hexDigits[bytes[i] & 0x0f]; //   byte  4 
		}

		return new String(chars);
	}

	/**
	 * 16          
	 * @param hexString 16     
	 * @return     
	 */
	public static byte[] hexString2ByteArray(String hexString) {
		if (hexString == null || "".equals(hexString)) {
			return null;
		}
		//        char[],    byte[]
		int length = hexString.length() / 2;
		char[] hexChars = hexString.toCharArray();
		byte[] bytes = new byte[length];
		String hexDigits = "0123456789abcdef";
		for (int i = 0; i < length; i++) {
			int pos = i * 2; //         byte
			int h = hexDigits.indexOf(hexChars[pos]) << 4; //  1
			int l = hexDigits.indexOf(hexChars[pos + 1]); //  2
			if (h == -1 || l == -1) { //  16    
				return null;
			}
			bytes[i] = (byte) (h | l);
		}
		return bytes;
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 //String str = "15811111111";
		 String str = "     16     ";
		 String result = null;
		 byte[] bytes = null;
		 long b = System.currentTimeMillis();
		 for(int i=0; i<10000; i++){
			 //result = byteArray2HexString(str.getBytes()); //27
			 result = hexEncode(str.getBytes());	//32
		 }
		 System.out.println("  :"+(System.currentTimeMillis()-b));
		 
		 System.out.println("result:"+result);
		 long b2 = System.currentTimeMillis();
		 for(int i=0; i<10000; i++){
			 //bytes = hexString2ByteArray(result); //32
			 bytes = hexDecode(result); //16
		 }
		 System.out.println("  :"+(System.currentTimeMillis()-b2));
		 System.out.println("result:"+new String(bytes));
	}

}

좋은 웹페이지 즐겨찾기