因最近项目业务需求需要,需要组装报文向其他终端发送报文,对平时项目开发来说,都是字符串、十进制的数操作的,向终端发送的报文有特殊要求,要十六进制、或UTF-16字符串等,记录下工作中转换
在线进制转换工具 可以对比查看代码转换与在线工具转换
1、二进制转十六进制
public static String twoToSixteen(String s) {
int data = Integer.valueOf(s, 2);
String hex = Integer.toHexString(data);
return hex;
}
2、十进制转二进制
public static String tenToTwo(String num) {
String s = Integer.toBinaryString(Integer.parseInt(num));
return s;
}
3、十六进制转十进制
public static String sixteenToTen(String num) {
BigInteger lngNum=new BigInteger(num,16);
return String.valueOf(lngNum.intValue());
}
4、十进制转十六进制
public static String tenToSixteen(String str) {
int data = Integer.parseInt(str);
String preData = Integer.toHexString(data);
return preData;
}
5、将汉字转换为16进制数
在线工具查看转换字符串(www.mytju.com/classcode/t…)
public static String gbkToUnicode(String str) {
String st = "";
try {
//**这里要非常的注意,在将字符串转换成字节数组的时候一定要明确是什么格式的,这里使用的是utf-8格式的,还有gb2312,ISO-8859-1等格式**
byte[] by = str.getBytes("UTF-8");
for (int i = 0; i < by.length; i++) {
String strs = Integer.toHexString(by[i]);
if (strs.length() > 2) {
strs = strs.substring(strs.length() - 2);
}
st += strs;
}
} catch (Exception e) {
e.printStackTrace();
}
return st;
}
6、字符串转ascii
在线查看Hex编码和Hex解码结果 stool.chinaz.com/hex
public static String strToASCII(String str) {
StringBuilder sb = new StringBuilder();
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
int i1 = Integer.valueOf(ch[i]).intValue();
String s = Integer.toHexString(i1);
sb.append(s);
}
return sb.toString();
}
7、补前缀,位数不够,前面补0
终端报文对长度有要求,位数不够需要前面补0
//num为需要补0的内容,length是总位数
public static String prefixStr(String num, int length) {
for (int len = num.length(); len < length; len = num.length()) {
num = "0" + num;
}
return num;
}