import cn.hutool.core.util.RandomUtil;
import java.nio.charset.StandardCharsets;
public class Hex {
private static final char[] DIGITS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public Hex() {
}
public static String encodeToString(byte[] bytes) {
char[] encodedChars = encode(bytes);
return new String(encodedChars);
}
public static char[] encode(byte[] data) {
int l = data.length;
char[] out = new char[l << 1];
int i = 0;
for(int var4 = 0; i < l; ++i) {
out[var4++] = DIGITS[(240 & data[i]) >>> 4];
out[var4++] = DIGITS[15 & data[i]];
}
return out;
}
public static byte[] decode(byte[] bytes) throws IllegalArgumentException {
return decode(new String(bytes));
}
public static byte[] decode(String hex) {
return decode(hex.toCharArray());
}
public static byte[] decode(char[] data) throws IllegalArgumentException {
int len = data.length;
if ((len & 1) != 0) {
throw new IllegalArgumentException("Odd number of characters.");
} else {
byte[] out = new byte[len >> 1];
int i = 0;
for(int j = 0; j < len; ++i) {
int f = toDigit(data[j], j) << 4;
++j;
f |= toDigit(data[j], j);
++j;
out[i] = (byte)(f & 255);
}
return out;
}
}
protected static int toDigit(char ch, int index) throws IllegalArgumentException {
int digit = Character.digit(ch, 16);
if (digit == -1) {
throw new IllegalArgumentException("Illegal hexadecimal character " + ch + " at index " + index);
} else {
return digit;
}
}
public static void main(String[] args) {
String s = RandomUtil.randomString(10).toUpperCase();
System.out.println(s);
String hexStr = encodeToString(s.getBytes(StandardCharsets.UTF_8));
System.out.println(hexStr);
byte[] bytes1 = decode(hexStr);
System.out.println(new String(bytes1));
}
}
Java 十六进制转换
最新推荐文章于 2024-07-16 05:09:55 发布