您的位置:首页 > 编程语言 > Java开发

【转】Javabyte[]数组和十六进制String之间的转换Util------包含案例和代码

2015-04-28 21:37 591 查看
原文网址:/article/2430114.html

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占2位。

同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。

根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。

下面是实现byte[]数组和十六进制字符串之间转化的工具类:

[java] view plaincopy

package text.com;

public class BytesUtil {

/**

* Convert byte[] to hex string. 把字节数组转化为字符串

* 这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。

* @param src byte[] data

* @return hex string

*/

public static String bytesToHexString(byte[] src){

StringBuilder stringBuilder = new StringBuilder("");

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv+" ");

}

return stringBuilder.toString();

}

/**

* Convert hex string to byte[] 把为字符串转化为字节数组

* @param hexString the hex string

* @return byte[]

*/

public static byte[] hexStringToBytes(String hexString) {

if (hexString == null || hexString.equals("")) {

return null;

}

hexString = hexString.toUpperCase();

int length = hexString.length() / 2;

char[] hexChars = hexString.toCharArray();

byte[] d = new byte[length];

for (int i = 0; i < length; i++) {

int pos = i * 2;

d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));

}

return d;

}

/**

* Convert char to byte

* @param c char

* @return byte

*/

private static byte charToByte(char c) {

return (byte) "0123456789ABCDEF".indexOf(c);

}

}

下面是测试程序:

[java] view plaincopy

package text.com;

public class Test {

public static void main(String[] args) {

byte b1 = 11;

byte b2 = 21;

byte b3 = 31;

byte b4 = 41;

byte b5 = 51;

byte b6 = 61;

byte b7 = 71;

byte b8 = 81;

byte[] bytes = new byte[] { b1, b2, b3, b4, b5, b6, b7, b8 };

String hexString = "0b 15 1f 29 33 3d 47 51";

String str = BytesUtil.bytesToHexString(bytes);

System.out.println("str--->" + str);

byte[] hexStringToBytes = BytesUtil.hexStringToBytes(hexString);

for (int i = 0; i < hexStringToBytes.length; i++) {

System.out.println("hexStringToBytes---->" + hexStringToBytes[i]);

}

}

}

控制台输出:

str--->0b 15 1f 29 33 3d 47 51
hexStringToBytes---->11
hexStringToBytes---->21
hexStringToBytes---->31
hexStringToBytes---->41
hexStringToBytes---->51
hexStringToBytes---->61
hexStringToBytes---->71
hexStringToBytes---->81

OK!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: