com.yixan.tools.common.util.HexUtil Maven / Gradle / Ivy
package com.yixan.tools.common.util;
/**
* 十六进制工具
*
* @author zhaohuihua
* @version V1.0 2015年11月7日
*/
public abstract class HexUtil {
/**
* 字符串转换为byte数组
* "ABCDEF" --> byte[(byte)0xAB, (byte)0xCD, (byte)0xEF]
* "AB CD EF" --> byte[(byte)0xAB, (byte)0xCD, (byte)0xEF]
* "123456EF" --> byte[(byte)0x12, (byte)0x34, (byte)0x56, (byte)0xEF]
* "12 34 56 EF" --> byte[(byte)0x12, (byte)0x34, (byte)0x56, (byte)0xEF]
* "0506070F" --> byte[(byte)0x5, (byte)0x6, (byte)0x7, (byte)0xF]
* "05 06 07 0F" --> byte[(byte)0x5, (byte)0x6, (byte)0x7, (byte)0xF]
*
* @param hex
* @return
*/
public static byte[] toBytes(String hex) {
if (VerifyUtil.isBlank(hex)) {
return null;
}
String string = hex.toUpperCase().replaceAll(" ", "");
if (string.length() % 2 != 0) {
string = "0" + string;
}
int length = string.length() / 2;
char[] chars = string.toCharArray();
byte[] bytes = new byte[length];
for (int i = 0, p = 0; i < chars.length && p < length;) {
int high = charToByte(chars[i++]);
int low = charToByte(chars[i++]);
bytes[p++] = (byte) (high << 4 | low);
}
return bytes;
}
/**
* byte[] 转换为字符串
* byte[(byte)0xAB, (byte)0xCD, (byte)0xEF] --> "ABCDEF"
* byte[(byte)0x12, (byte)0x34, (byte)0x56, (byte)0xEF] --> "123456EF"
* byte[(byte)0x5, (byte)0x6, (byte)0x7, (byte)0xF] --> "0506070F"
*
* @param bytes
* @return
*/
public static String toString(byte... bytes) {
return toString(bytes, false);
}
/**
* byte数组转换为日志字符串
* byte[(byte)0xAB, (byte)0xCD, (byte)0xEF] --> "AB CD EF"
* byte[(byte)0x12, (byte)0x34, (byte)0x56, (byte)0xEF] --> "12 34 56 EF"
* byte[(byte)0x5, (byte)0x6, (byte)0x7, (byte)0xF] --> "05 06 07 0F"
*
* @param bytes
* @return
*/
public static String toLogString(byte... bytes) {
return toString(bytes, true);
}
private static String toString(byte[] bytes, boolean split) {
if (VerifyUtil.isBlank(bytes)) {
return null;
}
StringBuilder buffer = new StringBuilder();
for (byte i : bytes) {
if (split && buffer.length() > 0) {
buffer.append(' ');
}
buffer.append(byteToChar((i & 0xF0) >> 4)).append(byteToChar(i & 0x0F));
}
return buffer.toString();
}
/**
* 数字转换为16进制字符串
* 8 --> "0x08"
* 300 --> "0x012C"
*
* @param number
* @return
*/
public static String toString(long number) {
String hex = Long.toHexString(number).toUpperCase();
if (hex.length() % 2 == 0) {
return "0x" + hex;
} else {
return "0x0" + hex;
}
}
/**
* byte数组转换为 数字
* byte[(byte)0xAB, (byte)0xCD, (byte)0xEF] --> 0xABCDEF
* byte[(byte)0x12, (byte)0x34, (byte)0x56, (byte)0xEF] --> 0x123456EF
* byte[(byte)0x5, (byte)0x6, (byte)0x7, (byte)0xF] --> 0x0506070F
*
* @param bytes
* @return
*/
public static long toLong(byte... bytes) {
long number = 0;
int length = bytes.length;
for (int i = 0; i < length; i++) {
number += (bytes[i] & 0xFF) << (length - i - 1) * 8;
}
return number;
}
/**
* byte数组转换为 数字
* byte[(byte)0xAB, (byte)0xCD, (byte)0xEF] --> 0xABCDEF
* byte[(byte)0x12, (byte)0x34, (byte)0x56, (byte)0xEF] --> 0x123456EF
* byte[(byte)0x5, (byte)0x6, (byte)0x7, (byte)0xF] --> 0x0506070F
*
* @param bytes
* @return
*/
public static int toInteger(byte... bytes) {
return (int) toLong(bytes);
}
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
private static char byteToChar(int b) {
return "0123456789ABCDEF".charAt(b);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy