字节数组与16进制转换

    xiaoxiao2021-12-14  24

    应用场景:一般的java报文加密中,例如des对称加密、md5签名,返回的都是字节数组,想要加密后的数据能被明文显示,一般将字节数组转换为16进制字符串     private static void test7() {         String str = "中国";         byte[] strArray = str.getBytes();         System.out.println("strArray: " + Arrays.toString(strArray));         StringBuffer sb = new StringBuffer();         for(byte b : strArray){             String s = Integer.toHexString(b&0xff);             if(s.length()==1) s = "0" + s;             sb.append(s);         }         System.out.println("sb: " + sb);                  char[] chs = sb.toString().toCharArray();         int len = chs.length/2;         byte[] bs = new byte[len];         for(int i=0; i<len; i++){             int pos = i*2;             bs[i] = (byte)((byte)"0123456789abcdef".indexOf(chs[pos])<<4 | (byte)"0123456789abcdef".indexOf(chs[pos+1]));         }         System.out.println("bs: "+Arrays.toString(bs));     } 结果: strArray: [-28, -72, -83, -27, -101, -67] sb: e4b8ade59bbd bs: [-28, -72, -83, -27, -101, -67] byte转int,为啥需要&0xFF? byte为8位,int为32位,与上0xFF将前面多余的24位舍去,保证数据的正确 一个字节对应两个16进制字符串,byte的高低四位对应16进制字符串 java中的负数是以补码的形式存放的,一个byte8位,最左边一位为符号位,范围-127到128 正数的反码和补码都是其本身,负数的反码:符号位不便,其它位取反;负数的补码:符号位不变,其他位取反加一 -1 原码:10000001 反码:11111110 补码:11111111

    转载请注明原文地址: https://ju.6miu.com/read-963400.html

    最新回复(0)