在于開發(fā)板對接的java開發(fā)時開發(fā)給來的都是無符號的字節(jié)這時候一般有很多校驗方式,比較簡單的就是和校驗.所謂和校驗就是把所有接收到的字節(jié)數(shù)相加,作為最后一位.,以此來檢驗這組數(shù)據(jù)是否為對的數(shù)據(jù),好做判斷.
現(xiàn)在分兩個方面來說
一.對接收到的數(shù)據(jù)進行校驗
接收到的數(shù)據(jù)進行和檢驗:接收到的數(shù)據(jù)有規(guī)定和校驗位(一般定位最后一位為和檢驗位,這里要根據(jù)你們自己規(guī)定的),我這里規(guī)定最后一位位和檢驗位,規(guī)定
和檢驗數(shù)值 = 和檢驗位之前的數(shù)據(jù)之和()
那么代碼如下:
/**
* 和校驗
* SUM(cmd, Length, Data0…DataN)^0xFF
* */
public static boolean getCheckSum(byte[] packBytes){
int checkSum = 0;
for (int i = 0; i < packBytes.length-1; i++) {
checkSum += packBytes[i];//計算和校驗
}
checkSum &= 0xff; //取低八位
return (byte)checkSum == packBytes[ packBytes.length-1];//比對給到的數(shù)據(jù)真實性
}
二.向設備發(fā)送字節(jié)數(shù)據(jù)
/**
* 和校驗
* SUM(cmd, Length, Data0…DataN)^0xFF
* */
public static byte[] getCheckSum(byte[] packBytes){
int checkSum = 0;
for (int i = 0; i < packBytes.length-1; i++) {
checkSum += packBytes[i];//計算和校驗
}
checkSum &= 0xff; //取低八位
byte[] send = Arrays.copyOf(packBytes, packBytes.length+ 1);
send[send.length-1] =(byte)checkSum
return send;
}
三.二合一寫法:只給出和的算法
/**
* 和校驗
* SUM(cmd, Length, Data0…DataN)^0xFF
*這里的byte數(shù)組如果是接收過來的數(shù)據(jù)就用 Arrays.copyOf()復制長度-1作為參數(shù) 得到的結(jié)果跟最后一位比較即可.這個方法只是求和檢驗位的.不是發(fā)送的byte[].
* */
public static byte getCheckSum(byte[] packBytes){
int checkSum = 0;
for (int i = 0; i < packBytes.length-1; i++) {
checkSum += packBytes[i];//計算和校驗
}
checkSum &= 0xff; //取低八位
return (byte)checkSum ;
}