Java中十六进制和字符串的转换

对于Java十六进制字符串的转换不知你是否清楚?如果不了解这方面的知识,那得跟随云上诗词技术频道的编辑往下面对应学习啦,好啦,不占用各位的时间了,一起进行学习吧。

toHexStringpublic static String toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。如果参数为负,那么无符号整数值为参数加上 232;否则等于该参数。将该值转换为十六进制(基数 16)的无前导 0 的 ASCII 数字字符串。如果无符号数的大小值为零,则用一个零字符 '0' ('\u0030') 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。用以下字符作为十六进制数字:0123456789abcdef这些字符的范围是从 '\u0030' 到 '\u0039' 和从 '\u0061' 到 '\u0066'。如果希望得到大写字母,可以在结果上调用 String.toUpperCase() 方法:Integer.toHexString(n).toUpperCase()参数:i - 要转换成字符串的整数。返回:用十六进制(基数 16)参数表示的无符号整数值的字符串表示形式。// 转化字符串为十六进制编码public static String toHexString(String s){String str="";for (int i=0;i<s.length();i++){int ch = (int)s.charAt(i);String s4 = Integer.toHexString(ch);str = str + s4;}return str;}// 转化十六进制编码为字符串public static String toStringHex(String s){byte[] baKeyword = new byte[s.length()/2];for(int i = 0; i < baKeyword.length; i++){try{baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));}catch(Exception e){e.printStackTrace();}}try{s = new String(baKeyword, "utf-8");//UTF-16le:Not}catch (Exception e1){e1.printStackTrace();}return s;}// 转化十六进制编码为字符串public static String toStringHex(String s){byte[] baKeyword = new byte[s.length()/2];for(int i = 0; i < baKeyword.length; i++){try{baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));}catch(Exception e){e.printStackTrace();}}try{s = new String(baKeyword, "utf-8");//UTF-16le:Not}catch (Exception e1){e1.printStackTrace();}return s;}public static void main(String[] args) {System.out.println(encode("中文"));System.out.println(decode(encode("中文")));}/** 16进制数字字符集*/private static String hexString="0123456789ABCDEF";/** 将字符串编码成16进制数字,适用于所有字符(包括中文)*/public static String encode(String str){//根据默认编码获取字节数组byte[] bytes=str.getBytes();StringBuilder sb=new StringBuilder(bytes.length*2);//将字节数组中每个字节拆解成2位16进制整数for(int i=0;i<bytes.length;i++){sb.append(hexString.charAt((bytes[i]&0xf0)>>4));sb.append(hexString.charAt((bytes[i]&0x0f)>>0));}return sb.toString();}/** 将16进制数字解码成字符串,适用于所有字符(包括中文)*/public static String decode(String bytes){ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);//将每2位16进制整数组装成一个字节for(int i=0;i<bytes.length();i+=2)baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));return new String(baos.toByteArray());}第二种方法:将指定byte数组以16进制的形式打印到控制台

原创文章,作者:nxyxs,如若转载,请注明出处:http://www.yunshangshici.com/55719.html

(0)
上一篇 2022年6月11日 下午3:01
下一篇 2022年6月11日 下午3:01

相关推荐

返回顶部