자바 바이트 배열 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));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.