进行传输报文(16进制)的时候需要计算校验和相异或 。
比如说发报文的时候厂家设备要求要进行计算校验互相异或,规定报文是 AA 55 04 00 02 DA(16进制的),然后根据报文计算出异或校验和(根据一下代码计算)为:23 。所以组合最终发送的报文 :AA 55 04 00 02 DA 23。
/**
*校验和 互相异或 计算
* 传字符串
* 例如:“AA55040002DA”
* 结果:23
*/
public static String getCheckXOR(String s){
String regex = "(.{2})";
String replace = s.replaceAll(regex, "$1 ");
String[] st = replace.split(" ");
int[] c = new int[st.length+1];
for (int i = 0; i <st.length; i++) {
int i1 = Integer.parseInt(st[i], 16);
c[i]=i1;
}
char x = 0;
for (int i = 0; i < c.length; i++)
x ^= c[i];
return String.format("%x", (int)x);
}