package jiexi;
|
|
public class HexUtils {
|
// 十六进制字符快速转换表 (ASCII范围内)
|
private static final int[] HEX_VALUES = new int[128];
|
static {
|
for (int i = 0; i < HEX_VALUES.length; i++) {
|
char c = (char) i;
|
if (c >= '0' && c <= '9') HEX_VALUES[i] = c - '0';
|
else if (c >= 'A' && c <= 'F') HEX_VALUES[i] = 10 + (c - 'A');
|
else if (c >= 'a' && c <= 'f') HEX_VALUES[i] = 10 + (c - 'a');
|
else HEX_VALUES[i] = -1;
|
}
|
}
|
|
// 线程安全的字符缓冲区 (初始大小256)
|
private static final ThreadLocal<char[]> CHAR_BUF_CACHE =
|
ThreadLocal.withInitial(() -> new char[256]);
|
|
/**
|
* 获取线程本地字符缓冲区
|
* @return 可复用的char[256]缓冲区
|
*/
|
public static char[] getThreadLocalBuffer() {
|
return CHAR_BUF_CACHE.get();
|
}
|
|
/**
|
* 快速将两个十六进制字符转换为字节
|
* @param c1 高位字符 (0-9, A-F, a-f)
|
* @param c2 低位字符 (0-9, A-F, a-f)
|
* @return 转换后的字节值 (无效字符返回0)
|
*/
|
public static int fastHexToByte(char c1, char c2) {
|
int high = (c1 < 128) ? HEX_VALUES[c1] : -1;
|
int low = (c2 < 128) ? HEX_VALUES[c2] : -1;
|
if (high < 0 || low < 0) return 0;
|
return (high << 4) | low;
|
}
|
}
|