累加和校验具体是啥,直接去百度,我这里简单说下就直接上代码。
假如要发送0x55,0x60, 累加和之后就是 0xB5(0b10110101),取反是0xA4(0b01001010)。。。。
0x55
0x50
0xB5(0b10110101) 累加和结果
0xA4(0b01001010) 取反
/**
* 累加和校验
*
* @param data 十六进制的字符
* @return 十六进制的累加和结果
*/
public static String makeChecksum(String data) {
if (data == null || data.equals("")) {
return "";
}
int total = 0;
int len = data.length();
int num = 0;
while (num < len) {
// 该循环里的 num+4 这个4 是根据实际来决定 如果是 一个字节的累加那就是+2 两个字节的累加就是 +4
String s = data.substring(num, num + 4);
total += Integer.parseInt(s, 16);
num = num + 4;
}
//65535 同上 如果是 一个字节的累加那就是255 两个字节的累加就是 65535 取反同理
int mod = total % 65536;
String hex = Integer.toHexString(mod);
len = hex.length();
// 如果不够校验位的长度,补0,这里用的是两位校验
if (len < 2) {
hex = "0" + hex;
}
return hex;
}
// 取反就简单了
直接使用 65535(0xFFFF) 或者 255(0xFF) 减去 十进制的值 就是取反后的结果(十进制)
我写过一个进制转换的;不会的就可以去参考