16进制字符串转字节数组

来源:互联网 发布:什么叫农村淘宝 编辑:程序博客网 时间:2024/05/21 18:42
/** * 16进制的字符串表示转成字节数组 * * @param hexString *16进制格式的字符串 * @return 转换后的字节数组 **/public static byte[] hexStr2ByteArray(String hexString) {if (StringUtils.isEmpty(hexString))throw new IllegalArgumentException("this hexString must not be empty"); hexString = hexString.toLowerCase();final byte[] byteArray = new byte[hexString.length() / 2];int k = 0;for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先//将hex 转换成byte   "&" 操作为了防止负数的自动扩展// hex转换成byte 其实只占用了4位,然后把高位进行右移四位// 然后“|”操作  低四位 就能得到 两个 16进制数转换成一个byte.//byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);byteArray[i] = (byte) (high << 4 | low);k += 2;}return byteArray;}   /**    * 16进制字符串转换成byte数组    * @param 16进制字符串    * @return 转换后的byte数组    */  public static byte[] hex2Byte(String hex) {String digital = "0123456789ABCDEF";char[] hex2char = hex.toCharArray();byte[] bytes = new byte[hex.length() / 2];int temp;for (int i = 0; i < bytes.length; i++) {// 其实和上面的函数是一样的 multiple 16 就是右移4位 这样就成了高4位了// 然后和低四位相加, 相当于 位操作"|" //相加后的数字 进行 位 "&" 操作 防止负数的自动扩展. {0xff byte最大表示数}temp = digital.indexOf(hex2char[2 * i]) * 16;temp += digital.indexOf(hex2char[2 * i + 1]);bytes[i] = (byte) (temp & 0xff);}return bytes;}

原创粉丝点击