1.校验求和
2.代码实现
import java.util.Locale;
public class ADD8Util {
/**
* 求校验和的算法 (ADD8)
*
* @param b 需要求校验和的字节数组
* @return 校验和
*/
private byte sumCheck(byte[] b, int len){
int sum = 0;
for(int i = 0; i < len; i++){
sum = sum + b[i];
}
if(sum > 0xff){ //超过了255,使用补码(补码 = 原码取反 + 1)
sum = ~sum;
sum = sum + 1;
}
return (byte) (sum & 0xff);
}
/**
* byte转十六进制字符
*
* @param b byte
* @return 十六进制字符
*/
public static String byteToHex(byte b) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
return hex.toUpperCase(Locale.getDefault());
}
@org.junit.Test
public void test1(){
// 01 01 01 FF FF FF FF FF FF
byte[] b = new byte[9];
b[0] = (byte) 0x01;
b[1] = (byte) 0x01;
b[2] = (byte) 0x01;
b[3] = (byte) 0xFF;
b[4] = (byte) 0xFF;
b[5] = (byte) 0xFF;
b[6] = (byte) 0xFF;
b[7] = (byte) 0xFF;
b[8] = (byte) 0xFF;
byte result = sumCheck(b, 9);
System.out.println(byteToHex(result)); //正确的结果应该是FD
}
}