【util】用java实现16进制和byte,string的相互转换以及格式化16进制

来源:互联网 发布:电脑控制手机桌面软件 编辑:程序博客网 时间:2024/05/22 00:25

最近程序用到的16进制比较多,所以写了一个16进制的util,供大家参考
工具类

package utils;import java.io.UnsupportedEncodingException;/** *  * @author qq1623299667 * */public class HexUtil {/** * 将任何字符串按指定编码输出成特定格式的16进制 * @param string * @param charsetName * @return */public static String stringToHexString(String string,String charsetName) {StringBuilder sb = new StringBuilder();try {for (int i = 0; i < string.length(); i++) {char ch = string.charAt(i);byte[] bytes = String.valueOf(ch).getBytes(charsetName);String hex = bytesToHexString(bytes);sb.append(hex);}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return sb.toString();}/** * 将字节码数组按16进制的方式保存为字符串 * @param bytes * @return */public static String bytesToHexString(byte[] bytes){      StringBuilder sb = new StringBuilder();      for (int i = 0; i < bytes.length; i++) {          int num = bytes[i] & 0xFF;          String hex = Integer.toHexString(num);        if (hex.length() < 2) {              sb.append(0);          }          sb.append(hex);     }  return sb.toString();}/** * 将16进制的字符串转换成byte * @param hexString * @return */public static byte[] hexStringTobytes(String hexString){StringBuilder sb = new StringBuilder();for(int i=0;i<hexString.length()/2;i++){sb.append(hexString.substring(2*i,2*i+2));}hexString = sb.toString();byte[] bytes = new byte[hexString.length()/2];for(int i=0;i<hexString.length()/2;i++){bytes[i] = (byte)(0xff & Integer.parseInt(hexString.substring(2*i, 2*i+2), 16));}return bytes;}/** * 将16进制的字符串转换成string * @param hexString * @return */public static String hexStringToString(String hexString,String charsetName){try {return new String(hexStringTobytes(hexString),charsetName);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;}/** * 将16进制字符串按特定格式格式化 * @param hexString * @return */public static String hexStringFormat(String hexString){StringBuilder sb = new StringBuilder();sb.append("\r\n");for(int i=0;i<hexString.length()/2;i++){sb.append(hexString.substring(2*i, 2*i+2).toUpperCase());sb.append(" ");if(i%16==15){sb.append("\r\n");}}return sb.toString();}}

测试类

package utils;/** *  * @author qq1623299667 * */public class TestRadix {public static void main(String[] args) {try{//将bytes的16进制输出String hexString1 = HexUtil.bytesToHexString("你有没有freestyle?".getBytes("utf-8"));System.out.println(hexString1);//将String的16进制输出String hexString2 = HexUtil.stringToHexString("我有freestyle", "utf-8");System.out.println(hexString2);//将16进制的字符串转换成bytebyte[] bytes = HexUtil.hexStringTobytes(HexUtil.stringToHexString("请务必相信我真的有freestyle!", "utf-8"));System.out.println(new String(bytes,"utf-8"));//将16进制的字符串转换成stringString string = HexUtil.hexStringToString(HexUtil.stringToHexString("不!你骗人,你根本就没有freestyle!", "utf-8"),"utf-8");System.out.println(string);//将16进制格式化成特定格式String hexStringFormat = HexUtil.hexStringFormat(HexUtil.stringToHexString("阁下果然有freestyle,是在下输了!", "utf-8"));System.out.println(hexStringFormat);}catch(Exception e){e.printStackTrace();}}}

输出结果

e4bda0e69c89e6b2a1e69c89667265657374796c65efbc9fe68891e69c89667265657374796c65请务必相信我真的有freestyle!不!你骗人,你根本就没有freestyle!E9 98 81 E4 B8 8B E6 9E 9C E7 84 B6 E6 9C 89 66 72 65 65 73 74 79 6C 65 2C E6 98 AF E5 9C A8 E4 B8 8B E8 BE 93 E4 BA 86 EF BC 81 















原创粉丝点击