JAvaにおける16進符号化と復号化
5496 ワード
一、紹介
16進数符号化は、0−9,a−fの2進数変換16進数文字列である.あるいは反対です.
実装は、バイナリストリームを4ビットごとにグループ化し、符号化することである.
二、コード実装
source : study hard and make progress everyday encode result : 7374756479206861726420616e64206d616b652070726f6772657373206576657279646179 decode result : study hard and make progress everyday
16進数符号化は、0−9,a−fの2進数変換16進数文字列である.あるいは反対です.
実装は、バイナリストリームを4ビットごとにグループ化し、符号化することである.
二、コード実装
public class ByteHexMain {
public static void main(String[] args) throws Exception {
String source = "study hard and make progress everyday";
System.out.println("source : "+source);
String hexStr = bytes2HexStr(source.getBytes("utf8")); //
System.out.println("encode result : "+ hexStr);
String rawSource = new String(hexStr2Bytes(hexStr),"utf8"); //
System.out.println("decode result : "+rawSource);
}
//byte hex
static String bytes2HexStr(byte[] byteArr) {
if (null == byteArr || byteArr.length < 1) return "";
StringBuilder sb = new StringBuilder();
for (byte t : byteArr) {
if ((t & 0xF0) == 0) sb.append("0");
sb.append(Integer.toHexString(t & 0xFF)); //t & 0xFF Integer (java )
}
return sb.toString();
}
//hex byte
static byte[] hexStr2Bytes(String hexStr) {
if (null == hexStr || hexStr.length() < 1) return null;
int byteLen = hexStr.length() / 2;
byte[] result = new byte[byteLen];
char[] hexChar = hexStr.toCharArray();
for(int i=0 ;i;i++){
result[i] = (byte)(Character.digit(hexChar[i*2],16)<<4 | Character.digit(hexChar[i*2+1],16));
}
return result;
}
}
実行結果:source : study hard and make progress everyday encode result : 7374756479206861726420616e64206d616b652070726f6772657373206576657279646179 decode result : study hard and make progress everyday