字符串、数值与16进制相互转化
程序员文章站
2022-03-14 15:56:44
...
字符串、数值与16进制相互转化
首先创建一个工具类:
package c;
public class DataUtils {
/*
* 字节数组转16进制字符串
*/
public static String bytesToHexString(byte[] bArr) {
if (bArr == null) {
return null;
}
StringBuffer sb = new StringBuffer(bArr.length);
String sTmp;
for (int i = 0; i < bArr.length; i++) {
sTmp = Integer.toHexString(0xFF & bArr[i]);
if (sTmp.length() < 2)
sb.append(0);
sb.append(sTmp);
}
return sb.toString();
}
/**
* @param n
* @Title: intTohex
* @Description: int型转换成16进制
* @return: String
*/
public static String intTohex(int n) {
StringBuffer s = new StringBuffer();
String a;
char[] b = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
while (n != 0) {
s = s.append(b[n % 16]);
n = n / 16;
}
a = s.reverse().toString();
if ("".equals(a)) {
a = "00";
}
if (a.length() == 1) {
a = "0" + a;
}
return a;
}
/**
* 字符串转16进制字符串
*
* @param strPart
* @return
*/
public static String string2HexString(String strPart) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < strPart.length(); i++) {
int ch = (int) strPart.charAt(i);
String strHex = Integer.toHexString(ch);
hexString.append(strHex);
}
return hexString.toString();
}
/**
* 十六进制转字节数组
*
* @param src
* @return
*/
public static byte[] hexString2Bytes(String src) {
int l = src.length() / 2;
byte[] ret = new byte[l];
for (int i = 0; i < l; i++) {
ret[i] = (byte) Integer
.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue();
}
return ret;
}
/**
* Hex字符串转byte
*
* @param inHex 待转换的Hex字符串
* @return 转换后的byte
*/
public static byte hexToByte(String inHex) {
return (byte) Integer.parseInt(inHex, 16);
}
/**
* hex字符串转byte数组
*
* @param inHex 待转换的Hex字符串
* @return 转换后的byte数组结果
*/
public static byte[] hexToByteArray(String inHex) {
int hexlen = inHex.length();
byte[] result;
if (hexlen % 2 == 1) {
//奇数
hexlen++;
result = new byte[(hexlen / 2)];
inHex = "0" + inHex;
} else {
//偶数
result = new byte[(hexlen / 2)];
}
int j = 0;
for (int i = 0; i < hexlen; i += 2) {
result[j] = hexToByte(inHex.substring(i, i + 2));
j++;
}
return result;
}
Java 代码:
byte[] b = {0x12, 0x23, 0x5a};
// 字节转换为16进制字符串
String hexStr = bytesToHexString(b);
System.out.println("hexStr:" + hexStr);
// int 转 16进制字符串
String hexStr1 = Integer.toHexString(2345);
System.out.println("hexStr1:" + hexStr1);
// 16进制转字节数组
byte[] c = hexString2Bytes(Integer.toHexString(2345));
System.out.println("十六进制字节数组:" + c);
// int 转16进制字符串
System.out.println(intTohex(2345));
// int转16进制 后转16进制字节数组
System.out.println("十六进制字节数组:" + DataUtils.hexToByteArray(Integer.toHexString(2345)));
打印结果:
hexStr:12235a
hexStr1:929
十六进制字节数组:[[email protected]
929
十六进制字节数组:[[email protected]