2011-11-01 49 views
0

我需要一個應用程序的CRC校驗我在寫作,但不能找出在線代碼和計算器,我做錯了什麼。我可能無法正確理解它。這是我需要的:Android CRC-CCITT

它使用帶反向輸入位順序的起始值爲0xFFFF的CRC-CCITT。例如,獲取設備類型消息是:0x01,0x06,0x01,0x00,0x0B,0xD9。 CRC是0xD90B。

而這是使用的代碼進口:

public static int CRC16CCITT(byte[] bytes) { 
    int crc = 0xFFFF;   // initial value 
    int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12) 

    for (byte b : bytes) { 
     for (int i = 0; i < 8; i++) { 
      boolean bit = ((b >> (7-i) & 1) == 1); 
      boolean c15 = ((crc >> 15 & 1) == 1); 
      crc <<= 1; 
      if (c15^bit) crc ^= polynomial; 
     } 
    } 

    crc &= 0xffff; 
    //System.out.println("CRC16-CCITT = " + Integer.toHexString(crc)); 
    return crc; 

我寫它用於Android設備,從而需要在java中。

回答

1

這是我在我的應用程序中使用的代碼(它的工作原理)。

static public int GenerateChecksumCRC16(int bytes[]) { 

     int crc = 0xFFFF; 
     int temp; 
     int crc_byte; 

     for (int byte_index = 0; byte_index < bytes.length; byte_index++) { 

      crc_byte = bytes[byte_index]; 

      for (int bit_index = 0; bit_index < 8; bit_index++) { 

       temp = ((crc >> 15))^((crc_byte >> 7)); 

       crc <<= 1; 
       crc &= 0xFFFF; 

       if (temp > 0) { 
        crc ^= 0x1021; 
        crc &= 0xFFFF; 
       } 

       crc_byte <<=1; 
       crc_byte &= 0xFF; 

      } 
     } 

     return crc; 
    }