1、由于协议中的校验需要用到byte数组 相加 取后两位判断
问题来了 byte数据怎么相加?
https://blog.csdn.net/dearfellow/article/details/52624063 请看这个地址
我的项目里面会用到 55 AA 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
这样的 里面会有 AA 这又要怎么相加呢?
1byte(字节)=8bit(位)
4位(bit)二进制可以表示一个16进制数字,2字节(byte)是16位,正好可以表示4个16进制数字
55AA = 0101 0101 1010 1010
总而言之是 16进制数据相加,计算校验和
取得是低位校验和
public String makeChecksum(String data)
{
if (StringUtils.isEmpty(data))
{
return "";
}
int iTotal = 0;
int iLen = data.length();
int iNum = 0;
while (iNum < iLen)
{
String s = data.substring(iNum, iNum + 2);
System.out.println(s);
iTotal += Integer.parseInt(s, 16);
iNum = iNum + 2;
}
/**
* 用256求余最大是255,即16进制的FF
*/
int iMod = iTotal % 256;
String sHex = Integer.toHexString(iMod);
iLen = sHex.length();
//如果不够校验位的长度,补0,这里用的是两位校验
if (iLen < 2)
{
sHex = "0" + sHex;
}
return sHex;
}