要计算一个长度为15的字符数组的crc8校验码,用java该怎么实现啊?

解决方案 »

  1.   


    public static int crc8(byte[] bs,int count){
    int crc=0;
    for(int i=0;i != count;i++){
    int data=bs[i];
    int bitCounter=8;
    do{
    int feedbackBit=(crc ^ data) & 0x01;
    if(feedbackBit == 0x01){
    crc=crc ^ 0x18;// 0X18 = X^8+X^5+X^4+X^0
    }
    crc=(crc >> 1) & 0x7F;
    if(feedbackBit == 0x01){
    crc=crc | 0x80;
    }
    data=data >> 1;
    bitCounter--;
    }while(bitCounter > 0);
    }
    return crc;
    }
      

  2.   

    也许有BUG,  没有手段验证
      

  3.   

    我这里有一个用C++代码实现的算法,但不知如何翻译为JAVA?struct BITS
    {
    BYTE b0 : 1;
    BYTE b1 : 1;
    BYTE b2 : 1;
    BYTE b3 : 1;
    BYTE b4 : 1;
    BYTE b5 : 1;
    BYTE b6 : 1;
    BYTE b7 : 1;
    };BYTE COHJx::CrcCheck(BYTE *Str)
    {
    int i;
    BITS crc, xd, j;
    BYTE *pCrc, *pXd;
    char* p = (char*)Str;
    *p = (char)0x80;
    pCrc = (BYTE *) &crc;
    pXd  = (BYTE *) &xd;
    *pXd = *pCrc = 0;

    for(i = 0; i < OHSTRLENGTH; i++, p++)
    {
    memcpy(&j, p, 1);
    *pXd = *p ^ *pCrc;
    crc.b7 = xd.b7 ^ xd.b6 ^ xd.b3;
    crc.b6 = xd.b6 ^ xd.b5 ^ xd.b2;
    crc.b5 = xd.b5 ^ xd.b4 ^ xd.b1;
    crc.b4 = xd.b4 ^ xd.b3 ^ j.b0;
    crc.b3 = xd.b6 ^ xd.b2;
    crc.b2 = xd.b5 ^ xd.b1;
    crc.b1 = xd.b7 ^ xd.b4 ^ j.b0;
    }
    *pCrc >>= 1;
    *pCrc |= 0x80;

    return *pCrc;
    }