当我们解析通信协议或者16进制文件,java程序一般会把内容转换成byte[],就会涉及到字符和数组的转换。查了很多资料,有很多大神写了解决此问题的方法,但是现在根据我的实际情况,站在巨人的肩膀上,进行了一些修改。目前,toHexString()和toArrayByte()这两个方法相互转换是不会修改原来的byte[]内容。
/**
* To byte array byte [ ].
*
* @param hexString the hex string
* @return the byte [ ]
*/
public static byte[] toByteArray(String hexString) {
if (StringUtils.isEmpty(hexString))
return null;
hexString = hexString.toLowerCase();
final byte[] byteArray = new byte[hexString.length() >> 1];
int index = 0;
for (int i = 0; i < hexString.length(); i++) {
if (index > hexString.length() - 1)
return byteArray;
byte highDit = (byte) (Character.digit(hexString.charAt(index), 16) & 0xFF);
byte lowDit = (byte) (Character.digit(hexString.charAt(index + 1), 16) & 0xFF);
byteArray[i] = (byte) (highDit << 4 | lowDit);
index += 2;
}
return byteArray;
}
/**
* byte[] to Hex string.
*
* @param byteArray the byte array
* @return the string
*/
public static String toHexString(byte[] byteArray) {
final StringBuilder hexString = new StringBuilder("");
if (byteArray == null || byteArray.length <= 0)
return null;
for (int i = 0; i < byteArray.length; i++) {
int v = byteArray[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
hexString.append(0);
}
hexString.append(hv);
}
return hexString.toString().toLowerCase();
}
参考博客:http://blog.csdn.net/linlzk/article/details/6566124