在一些应用中需要将数据包中的十六进制数进行转换,或者数据加密后传送,这里只针对十六进制与字符串在java中的简单转换记录:
package com.xiaoli.test;
public class EncodeT {
// 转化字符串为十六进制编码
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 void main(String[] args){
String test = "47 45 54 20 2F 64 61 74 61 2F 62 72 66 76 65 72 73 69 6F 6E"+
"2E 78 6D 6C 20 48 54 54 50 2F 31 2E 31 0D 0A 43 6F 6E 6E 65"+
"63 74 69 6F 6E 3A 20 43 6C 6F 73 65 0D 0A 41 63 63 65 70 74"+
"3A 20 74 65 78 74 2F 68 74 6D 6C 2C 61 70 70 6C 69 63 61 74"+
"69 6F 6E 2F 78 68 74 6D 6C 2B 78 6D 6C 2C 61 70 70 6C 69 63"+
"61 74 69 6F 6E 2F 78 6D 6C 3B 71 3D 30 2E 39 2C 2A 2F 2A 3B"+
"71 3D 30 2E 38 0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 4D"+
"6F 7A 69 6C 6C 61 2F 34 2E 30 20 28 63 6F 6D 70 61 74 69 62"+
"6C 65 3B 20 4D 53 49 45 20 37 2E 30 3B 20 57 69 6E 64 6F 77"+
"73 20 4E 54 20 35 2E 31 3B 4D 69 73 65 72 20 52 65 70 6F 72"+
"74 29 0D 0A 48 6F 73 74 3A 20 6D 69 73 65 72 75 70 64 61 74"+
"65 2E 61 6C 69 79 75 6E 2E 63 6F 6D 0D 0A 43 61 63 68 65 2D"+
"43 6F 6E 74 72 6F 6C 3A 20 6E 6F 2D 63 61 63 68 65 0D 0A 0D"+
"0A";
String test2 = test.replaceAll(" ", "");
String res = toStringHex(test2);
System.out.println(res);
String test4 ="g ";
String test5 = toHexString(test4);
System.out.println(test5);
}
}
运行结果为:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;Miser Report)
Host: miserupdate.aliyun.com
Cache-Control: no-cache
6720