zoukankan      html  css  js  c++  java
  • Javabyte[]数组和十六进制String之间的转换Util------包含案例和代码

     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[]数组和十六进制字符串之间转化的工具类:


     

    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);
       }
    }
    

    下面是测试程序:

    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!

  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/riskyer/p/3325063.html
Copyright © 2011-2022 走看看