基础知识掌握,求问关于串口助手发送接收的16进制的转换问题
package Math01;
import java.io.UnsupportedEncodingException;
/**
* 16进制转换
*
*/
public class Math01 {
public static void main(String [] args) throws UnsupportedEncodingException {
// log.log(str2hexstr("0"));
String s = "DE 03 03 FF 00";
String m = hexstr2hex(s);
log(m+"将十六进制码转换成对应的十进制值");
log("转换成gb2312字符集编码:"+str2hexgb2312str(m));
log("GB2312的16进制编码转换成gb2312字符集的字符:"+gb2312hex2str(gb2312hex2str(str2hexgb2312str(m).replace(" ", ""))));
log("GB2312的16进制编码转换成gb2312字符集的字符:"+str2hexgb2312str(gb2312hex2str(gb2312hex2str(str2hexgb2312str(m).replace(" ", "")))));
}
/**
* 将16进制字符串对应16进制值,
* @param s
* @return
*/
public static String hexstr2hex(String s){
char [] chs = s.toCharArray();
int c =0;
String tmp ="";
for(int i =0;i<chs.length;i++){
if(chs[i]>='0'&&chs[i]<='9'){
c = chs[i]-'0';
}else if(chs[i]>='A'&&chs[i]<='F'){
c =chs[i]-'A'+10;
}else if(chs[i]>='a'&&chs[i]<='f'){
c =chs[i]-'a'+10;
}else{
continue ;
}
tmp +=(String.valueOf(Integer.toString(c,16)));
}
return tmp.toUpperCase();
}
/**
* 将字符串转化为对应的gb2312编码
* @throws UnsupportedEncodingException
*/
public static String str2hexgb2312str(String s) throws UnsupportedEncodingException{
String str="";
byte [] tmp = s.getBytes("gb2312");
for(byte a : tmp){
str +=Integer.toHexString(a&0xff);
}
return str;
}
/**
* 将16进制gb2312字符串转换为String字符
* @throws UnsupportedEncodingException
*/
public static String gb2312hex2str(String s) throws UnsupportedEncodingException{
byte [] chs = new byte[s.length()/2];
String str ="";
for(int i=0, j=0;i<chs.length;i++){
byte height =Byte.parseByte(s.substring(i*2,i*2+1),16);//高八位,0 ,1
byte low = Byte.parseByte(s.substring(i*2+1, i*2+2), 16);//低八位 2,3
chs[i] =(byte)(height<<4| low);
}
str =new String(chs,"gb2312");
return str;
}
public static void log(String s){
System.out.println(s);
}
}
//求问,为毛我转换字符串之后再还原,16进制码会丢失,本来是DE 03 03 FF 00 转回来变成了3f33f。