1
我有一個255字節數據的CRC16校驗和功能。解釋這個CRC16校驗和功能
校驗和計算從第1個字節到最後第3個字節。 您能否告訴我們這些代碼中發生了什麼,特別是「ekmCheckCrc」函數?下面是 是我得到的功能。
public void tryMe(byte[] responseFromDevice)
{
byte[] c = new byte[2];
c[0] = a[253];
c[1] = a[254];
log("EKM CRC : " + Integer.toHexString(ekmCheckCrc(responseFromDevice)) +
" Device CRC : " + Integer.toHexString((int) (c[0])) + Integer.toHexString((int) (c[1])));
}
public int ekmCheckCrc(byte[] dat) {
int crc = 0xffff;
for (int i = 1; i < dat.length-3; i++) {
crc = (crc >>> 8)^ekmCrcLut[(crc^dat[i]) & 0xff];
}
crc = (crc >>> 8) | (crc << 8);
crc = crc & 0x7f7f;
return crc;
}
static int[] ekmCrcLut = new int[]{
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
(EKM's LUT sits here, no point including the rest of it)
0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
};
好嗎但到底是什麼此代碼做: 對(INT I = 1;我>> 8)^ ekmCrcLut [(CRC^DAT [I ])&0xff]; } –
@Fazel:它是哈希計算的一部分。我不打算向您解釋基本算法的工作原理 - 閱讀有關Java運算符的教程或其他內容 –